在OpenGL中,我们可以使用glEnable (GL_LINE_STIPPLE);glLineStipple(2,0x00FF);
而在 dx9 中,我们可以用ID3DXLine
的方法画点线SetPattern(0x00FF)
。
但是dx11中似乎没有这样的方法来设置点画线的图案。如果这是真的,我想知道是否有一种聪明的方法可以在 dx11 中绘制点画线?
你可能会看看这个问题。它询问如何在未弃用的现代 OpenGL 中执行线条点画,这在功能上类似于 Direct3D 10+。
我的答案基本上是结合使用 alpha 测试和几何着色器来做到这一点:
也许您也可以使用带有 alpha(或红色)的 1D 纹理 通道将模式编码为 0.0(无行)或 1.0(行),然后 使线条的纹理坐标从 0 变为 1 并在片段中 着色器,你做一个简单的阿尔法测试,用阿尔法丢弃片段 低于某个阈值。您可以方便几何着色器 生成线的texCoords,否则您需要不同的顶点 对于每一行。这样你也可以使texCoord依赖于 线条的屏幕间距长度。
如果你画三角形,整个事情会变得更加困难(使用 多边形模式 GL_LINE)。然后你必须做三角线 在几何着色器中变换自己,放入三角形 并发布行(这也可能是弃用的原因 将来的多边形模式(如果还没有的话)。
虽然这个问题是关于OpenGL的,但基本原理是完全相同的,你只需要将着色器从答案映射到HLSL,考虑到它们的简单性,这应该不会太难。