Graphics Direct3D:无对角线的线框

Graphics Direct3D:无对角线的线框,graphics,directx,direct3d,wireframe,Graphics,Directx,Direct3d,Wireframe,在Direct3D中使用线框填充模式时,由于面拆分为两个三角形,所有矩形面都会显示一条对角线。如何消除这条线?我还想删除隐藏的曲面。线框模式不能做到这一点 我需要在等轴测线框视图中显示Direct3D模型。渲染场景必须显示模型面的边界,但必须排除对角线 去掉对角线很棘手,因为硬件可能只绘制三角形,而且很难确定哪条边是对角线。或者,可以应用线框纹理(或生成适当纹理的着色器)。这将解决隐藏线问题,但看起来很奇怪,因为线的厚度取决于z距离 使用线基本体并非易事,尽管可以轻松删除背向摄影机的曲面,但部分

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


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

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


使用线基本体并非易事,尽管可以轻松删除背向摄影机的曲面,但部分遮挡的曲面需要手动剪裁。最后,做一个两遍的方法-第一遍绘制填充的多边形,但只绘制到z缓冲区,然后用合适的z偏移在顶部绘制线。这将处理部分遮挡的曲面问题。

内置线框模式渲染基本体的边缘。在D3D中,基本体是三角形(或直线或点,但不是任意多边形),这意味着内置方式不会切割它

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

或者,您可以构造一个线列表,该列表只包含所需的边,并仅渲染它们


另一种选择是在Direct3D 10中使用几何体着色器。不知何故,这里有很多不同的选项。

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

使用双通道方法,我还有另一个问题。我没有使用纹理。因此,我认为线框将与填充颜色相同,并且不可见!第一个过程仅绘制到z缓冲区,图像缓冲区保持不变(因此可以看穿线框)。图像缓冲区仅在第二次传递时更新。我已经有一段时间没有做任何D3D的东西了,所以我不确定第一关的实用性。