我正在关注this sample尝试构建它。我将代码合并到我的解决方案中,这是一个Windows窗体应用程序(有点棘手w / XNA)。
当我最终得到一个立方体来绘制它最终在里面外面...或者外面...或者?亲眼看看。
该应用程序现在已有几千行,所以我无法将其粘贴到此处。我需要知道从哪里开始寻找。
知道这里有什么问题吗?
看起来双方的情况正在逐渐消失......但这应该不重要。图形引擎应该确定哪些是可见的,什么是不可见的,但它似乎是错误的。
提前致谢。
答案 0 :(得分:2)
有一个名为GraphicsDevice
的XNA Framework类,它包含基本渲染参数的所有属性。
在GraphicsDevice内部有一个成员struct DepthStencilState,需要配置以下属性:
最简单的方法是将其设置为静态定义的默认值。
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
如果仍有问题,请确保要渲染的RenderTarget是支持深度的纹理。例如:
finalFrameRT = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 0, RenderTargetUsage.PreserveContents);
如果您不希望看到朝后侧面的背面,则需要根据顶点索引的顺序将RasterizerState
设置为CullClockwise或CullCounterClockwise。
答案 1 :(得分:1)
这种机制称为“背面剔除”,这意味着不会绘制顶点按逆时针方向排序的形状。您可以通过运行以下代码取消此操作:
RasterizerState rs = new RasterizerState();
rs.CullMode = CullMode.None;
GraphicsDevice.RasterizerState = rs;
但是,这不是推荐的方法,因为它通常会导致图形设备绘制用户不可见的形状。正确的方法是更改生成顶点的代码,以顺时针顺序创建它们。