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