c++ - 为什么两个 3D 对象的交叉点是锯齿形的?

标签 c++ 3d directx direct3d

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

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

enter image description here

但是,如果我从不同的角度看同一个场景,我会看到两个平面以之字形相交,好像其中一个平面并不是真正的平面。这让我很烦。看起来像是天真的画家的算法被用来将地形的各个三角形与黄色平面相交。

enter image description here

知道如何说服 DirectX 创建平滑的交叉点吗? (会不会是我找不到一个参数的问题?)

最佳答案

Why?

Z 缓冲区分辨率不足。

May it be just a matter of one parameter which I can't find?

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

一种通过将近处和远方 Z 裁剪平面移动到一起来修复、限制 View 区域的 Z 大小的方法。

或者,如果您处理大地形并希望查看以千米为单位的场景,则需要对数深度或类似的东西,请参阅 this article用于比较几种方法。

关于c++ - 为什么两个 3D 对象的交叉点是锯齿形的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52003536/

相关文章:

c++ - 关于 Xcode4 和 C++

c++ - Blade 的扭曲效果 (glRotatef) 不起作用

c++ - FreeImage: 获取像素颜色

python - 如何在 Google Colab 交互式中制作 matplotlib 图

c++ - DirectX 9 地形生成 C++

c++ - 为什么整数比较比字符串比较快?

file - QCAR-sdk 和 MD2 文件

java - LWJGL - 隐藏时隐藏立方体面

c++ - 跟踪对象局部坐标空间

C# directx Sprite 原点