Direct3D:没有对角线的线框

时间:2008-11-06 12:03:56

标签: graphics directx direct3d wireframe

在Direct3D中使用线框填充模式时,由于面被分割为两个三角形,所有矩形面都会显示对角线。我该如何消除这条线?我还想删除隐藏的表面。线框模式不会这样做。

我需要在等轴测线框视图中显示Direct3D模型。渲染的场景必须显示模型面的边界,但必须排除对角线。

3 个答案:

答案 0 :(得分:2)

摆脱对角线很棘手,因为硬件可能只绘制三角形,并且很难确定哪条边是对角线。或者,您可以应用线框纹理(或生成合适纹理的着色器)。这将解决隐藏线问题,但看起来很奇怪,因为线的粗细将取决于z距离。

使用线条图元并非易事,尽管可以轻松移除背离相机的表面,但部分模糊的表面需要手动剪裁。作为最后的想法,做一个两遍方法 - 第一遍绘制填充的多边形,但只绘制到z缓冲区,然后用适当的z偏差在顶部绘制线条。这将处理部分模糊的表面问题。

答案 1 :(得分:1)

内置线框模式渲染基元的边缘。与D3D一样,基元是三角形(或线条或点 - 但不是任意多边形),这意味着内置方式不会削减它。

我猜你必须查找某种“边缘检测”算法。这些可以在图像空间中操作,您可以在其中将模型渲染为纹理,为每个逻辑多边形指定唯一的颜色,然后使用像素着色器执行后处理过程并检测颜色的任何变化(颜色变化=输出黑色,否则输出其他内容) )。

或者,您可以构建一个只包含所需边缘的线列表,然后渲染它们。

另一个替代方案可能是在Direct3D 10中使用几何着色器。不知何故,这里有很多不同的选项。

答案 2 :(得分:0)

我认为你需要手动绘制这些线,因为线框模式是内置模式,所以我认为你不能修改它。您可以获取网格中的顶点列表,并将它们处理为需要绘制的线条列表。