GL_LINES
一样渲染线条带,但是在PS中使用这些额外的扫描VB信息。线条粗细当前在Direct3D和任何现有的GPU中都不受支持。我所知道的没有一个GPU可以正确地画出直线(它们都使用退化多边形伪造线 - 也就是第二个和第三个顶点位于同一位置,因此三角形基本上会变成单条线)。
虽然在OpenGL中可以设置线宽,但OpenGL驱动程序创建了外围四边形(也不被任何当前的GPU支持,并且用每个四边形的两个三角形来模拟),将“线条”画在屏幕上。
因此,可能没有办法避免为此目的创建外围四边形。正如Stringer Bell在他的回答中所解释的那样,有几种方法可以实现这一点。
对我而言,最简单的方法是创建一个顶点缓冲区,其中每个顶点都出现两次,其法线指向“右”或“左”,具体取决于它们是线的右侧还是左侧边缘。然后,非常简单的顶点着色器可以通过将顶点位置改变其法向量的倍数来执行挤压操作。这样,您可以快速更改线宽,而无需在CPU上重新计算几何图形。如果想根据对象的大小或距离调整线宽,这可能会有用。
{{link1:"ID3DXLine接口实现使用纹理三角形进行线绘制。"}}
SamplerState wrapTriLinear {
AddressU = WRAP;
AddressV = WRAP;
}