4

私は現在「C#プログラミングの開始」を進めていますが、第7章でテクスチャを描画するときに問題が発生しました。

デモCDと同じコードを使用しました。テクスチャのパスを絶対に変更する必要がありましたが、レンダリングすると灰色で表示されます。

ロードされたテクスチャをファイルに書き込むようにプログラムをデバッグしましたが、これは問題ありません。問題はありません。そのため、その後の問題が発生しています。

コードのスニペットは次のとおりです。

public void InitializeGraphics()
{
    // set up the parameters
    Direct3D.PresentParameters p = new Direct3D.PresentParameters();
    p.SwapEffect = Direct3D.SwapEffect.Discard;
    ...
    graphics = new Direct3D.Device( 0, Direct3D.DeviceType.Hardware, this,
    Direct3D.CreateFlags.SoftwareVertexProcessing, p );
    ...
    // set up various drawing options
    graphics.RenderState.CullMode = Direct3D.Cull.None;
    graphics.RenderState.AlphaBlendEnable = true;
    graphics.RenderState.AlphaBlendOperation = Direct3D.BlendOperation.Add;
    graphics.RenderState.DestinationBlend = Direct3D.Blend.InvSourceAlpha;
    graphics.RenderState.SourceBlend = Direct3D.Blend.SourceAlpha;
    ...
}

public void InitializeGeometry()
{
    ...
    texture = Direct3D.TextureLoader.FromFile( 
            graphics, "E:\\Programming\\SharpDevelop_Projects\\AdvancedFrameworkv2\\texture.jpg", 0, 0, 0, 0, Direct3D.Format.Unknown,
            Direct3D.Pool.Managed, Direct3D.Filter.Linear, 
            Direct3D.Filter.Linear, 0 );
...
}

protected virtual void Render()
{
    graphics.Clear( Direct3D.ClearFlags.Target, Color.White , 1.0f, 0 );
    graphics.BeginScene();

    // set the texture
    graphics.SetTexture( 0, texture );

    // set the vertex format
    graphics.VertexFormat = Direct3D.CustomVertex.TransformedTextured.Format;

    // draw the triangles
    graphics.DrawUserPrimitives( Direct3D.PrimitiveType.TriangleStrip, 2, vertexes );

    graphics.EndScene();
    graphics.Present();
    ...
}

ここで何が悪いのか理解できません。明らかに、ウィンドウにテクスチャをロードすると、正常に表示されます。そのため、本に記載されているコード例には正しくないものがあります。それは実際には機能しません、そしておそらく私の環境に何か問題があるに違いありません。

4

1 に答える 1

1

あなたはそこで本当に古い技術を使用しています...あなたはゲームを作ろうとしていると思います(私たちが始めたときと同じように!)、XNAを使ってみてください。私の最善の推測は、それがあなたのグラフィックスドライバーだということです。私はそれが警官のように聞こえることを知っています、しかし真剣に、私はこれを以前に見ました、そして私が古いグラフィックカードを新しいものと交換するとそれはうまくいきました!私はそれが壊れているとか、それを機能させることが不可能だと言っているのではありません。しかし、私の最善の2つの提案は次のとおりです。

1)XNAの使用を開始し、http: //www.xnadevelopment.com/tutorials.shtmlのチュートリアルを使用します 。2)グラフィックカードを交換します(現在行っていることを続行したい場合)。

于 2012-06-04T22:09:29.650 に答える