为什么两个3D对象的交点为锯齿形?

时间:2018-08-24 11:31:34

标签: c++ 3d directx direct3d

我以前没有使用DirectX的经验,只是被分配到需要快速修改的项目中。

我目前正面临这个问题:我的表面实际上是一个由1024x1024点(地形)定义的带纹理的平面。它效果很好,我对此很满意。然后有一个正交的黄色半透明平面与地形相交。从侧面看,如下图所示(注意地形平坦):

enter image description here

但是,如果我以不同的角度看待同一场景,我​​会看到两个平面以锯齿形的方式相交,就像其中一个平面并不是真的那样。这让我很烦。看起来好像是一个幼稚的画家算法将地形的各个三角形与黄色平面相交。

enter image description here

有什么想法如何说服DirectX创建一个平滑的交点? (可能只是我找不到的一个参数的问题?)

1 个答案:

答案 0 :(得分:3)

  

为什么?

Z缓冲区分辨率不足。

  

可能只是我找不到的一个参数的问题吗?

主要参数是传递给顶点着色器的world * view *投影矩阵。

一种固定的方法是,通过将近和远的Z裁剪平面靠近在一起来限制视图区域的Z大小。

或者,如果您在较大的地形上工作并且想要查看以千米为单位的场景,则需要对数深度或类似的值,请参见this article,以比较几种方法。