これを先に投稿し、1 人が何らかの提案で返信したので、もう一度投稿すると思います。私たちがここで議論しているのが古い技術であることはわかっていますが、それでも - 私は立ち往生しています。ですから、どんな考えでも - 何でも - いただければ幸いです。
私は現在「Beginning C# Programming」に取り組んでおり、第 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();
...
}
ここで何が問題なのかわかりません。明らかに、ウィンドウにテクスチャをロードすると、問題なく表示されます。そのため、本に記載されているコード例には正しくないものがあります。実際には機能せず、おそらく私の環境に何か問題があるに違いありません。