Directx 为什么我的像素不在近/远平面上剪裁

Directx 为什么我的像素不在近/远平面上剪裁,directx,directx-10,Directx,Directx 10,我有一个很奇怪的问题。我使用D3D10渲染场景中的一些三角形,令人惊讶的是,这些像素的颜色值没有根据近/远平面进行剪裁。另一方面,深度值似乎被精确剪裁。正如我刚才所描述的,证明这一点有效的证据如下: 当我在“在”视锥体内的z范围内渲染对象时,一切正常 当一个对象在z范围内,另一个在其前面(在相机的眼睛和近平面之间)时,z范围内的对象“通过”较近的对象“发光”。所以z缓冲工作得非常好 我还检查了输出与顶点的值;所有位于z范围之外且应剪裁的顶点(它们位于z缓冲区中,但不在颜色缓冲区中)的z/W值都

我有一个很奇怪的问题。我使用D3D10渲染场景中的一些三角形,令人惊讶的是,这些像素的颜色值没有根据近/远平面进行剪裁。另一方面,深度值似乎被精确剪裁。正如我刚才所描述的,证明这一点有效的证据如下:

  • 当我在“在”视锥体内的z范围内渲染对象时,一切正常
  • 当一个对象在z范围内,另一个在其前面(在相机的眼睛和近平面之间)时,z范围内的对象“通过”较近的对象“发光”。所以z缓冲工作得非常好
  • 我还检查了输出与顶点的值;所有位于z范围之外且应剪裁的顶点(它们位于z缓冲区中,但不在颜色缓冲区中)的z/W值都在[0,1]间隔之外

有什么不对劲吗?我认为可能是某些渲染状态设置不正确,但我真的不知道该去哪里查看。

非常感谢图片和相关代码摘录。对象在视锥台的z范围内所有对象都在近平面的前面,正如您所看到的,第一张图片是正确的,第二张图片清楚地显示了在没有任何z测试的情况下渲染的所有像素这变得非常奇怪。我刚刚确定,当我设置自己的自定义光栅化器状态时,将关闭对近平面的剪裁(仅彩色像素!),同样,Z缓冲区工作正常),当我另外设置自己的自定义深度模板状态时,将关闭对远平面的剪裁。怎么回事?找到了!嗯。。。结果我忘了将DepthClipEnable设置为true()。我总是在D3D结构上调用ZeroMemory,并手动设置结构的所有变量。在这种情况下,我只是省略了其中一个。