在 Direct3D 中使用线框填充模式时,所有矩形面都会显示一条对角线,因为该面被分成两个三角形。如何消除这条线?我还想删除隐藏的表面。线框模式不这样做。
我需要在等距线框视图中显示 Direct3D 模型。渲染的场景必须显示模型面的边界,但必须排除对角线。
摆脱对角线很棘手,因为硬件可能只绘制三角形,并且很难确定哪条边是对角线。或者,您可以应用线框纹理(或生成合适纹理的着色器)。这将解决隐藏线问题,但看起来很奇怪,因为线的粗细取决于 z 距离。
使用线图元并非易事,尽管可以轻松移除背对相机的表面,但部分遮挡的表面需要手动裁剪。作为最后的想法,做一个两遍的方法——第一遍绘制填充的多边形,但只绘制到 z 缓冲区,然后用合适的 z 偏差在顶部绘制线条。这将处理部分模糊的表面问题。
内置线框模式渲染图元的边缘。与在 D3D 中一样,图元是三角形(或线,或点 - 但不是任意多边形),这意味着内置方式不会切割它。
我想你必须查找某种“边缘检测”算法。这些可以在图像空间中运行,您将模型渲染为纹理,为每个逻辑多边形分配唯一的颜色,然后使用像素着色器进行后处理并检测颜色的任何变化(颜色变化 = 输出黑色,否则输出其他内容)。
或者,您可以构建一个仅包含您需要的边缘的行列表并仅渲染它们。
另一种选择是在 Direct3D 10 中使用几何着色器。不知何故,这里有很多不同的选项。
我认为你需要手动绘制这些线,因为线框模式是一种内置模式,所以我认为你不能修改它。您可以获取网格中的顶点列表,并将它们处理成您需要绘制的线列表。