渲染时纹理呈现灰色

4
我正在学习《C#编程入门》,但在第七章绘制纹理时遇到了问题。
我使用了与演示光盘上相同的代码,尽管我必须更改纹理的路径为绝对路径,但渲染后它仍然呈灰色。
我已经对程序进行了调试,将加载的纹理写入文件中,一切都很好——没有问题。因此,那一点之后出现了问题。
以下是一些代码片段:
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();
    ...
}

我无法弄清楚这里出了什么问题。显然,如果我在Windows中加载纹理,它会正常显示-因此书中给出的代码示例存在问题。实际上它并没有起作用,我的环境可能出了问题。


你的纹理是否有Alpha通道?graphics.GraphicsDevice.RenderState.AlphaBlendEnable = true; - Jay
哎呀... "graphics.RenderState.AlphaBlendEnable = true;"。我试着注释掉启用这个选项的部分,但是没有效果。 - CdrTomalak
可能是在渲染中语句的顺序...请参见http://www.toymaker.info/Games/html/render_states.html - Jay
1
请不要在标题前添加"c# DirectX - "等内容,这就是标签的作用。 - John Saunders
好的,我会这样做。对于我描述的问题有什么想法吗? - CdrTomalak
重新安装DirectX9.0b SDK(以确保与书中完全一致)并没有任何改变。 - CdrTomalak
1个回答

1

你正在使用一种非常老的技术...我猜你正在尝试制作游戏(就像我们刚开始做的那样!),尝试使用XNA。我最好的猜测是你的图形驱动程序有问题。我知道这听起来像是在推卸责任,但是说真的,我以前也遇到过这种情况,一旦我把旧的显卡换成新的,它就可以工作了!我不是说它坏了,或者说它不可能工作。但是我最好的两个建议是:

1)开始使用XNA,并使用http://www.xnadevelopment.com/tutorials.shtml上的教程。 2)更换你的显卡(如果你想继续做你现在正在做的事情)。


我升级到了SlimDX和DX11。进展顺利。干杯! - CdrTomalak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接