【问题标题】:draw stipple line using vertex buffer in directx11在directx11中使用顶点缓冲区绘制点画线
【发布时间】:2012-08-13 04:15:23
【问题描述】:
在 OpenGL 中,我们可以使用glEnable (GL_LINE_STIPPLE);glLineStipple(2,0x00FF); 设置线条图案
而在dx9中,我们可以使用ID3DXLine的方法SetPattern(0x00FF)绘制点画线。
但似乎dx11中没有这样的方法来设置点画线的图案。如果是真的,我想知道是否有一种聪明的方法可以在 dx11 中绘制点画线?
【问题讨论】:
标签:
graphics
directx
directx-9
directx-11
【解决方案1】:
您可以查看this question。它询问如何在未弃用的现代 OpenGL 中进行线条点画,其功能类似于 Direct3D 10+。
My answer 基本上是使用 alpha 测试和几何着色器的组合来做到这一点:
也许您也可以使用带有 alpha(或红色)的 1D 纹理
通道将模式编码为 0.0(无行)或 1.0(行),然后
让线条的纹理坐标从 0 变为 1 并在片段中
shader 你做了一个简单的 alpha 测试,丢弃带有 alpha 的片段
低于某个阈值。您可以促进几何着色器
生成你的线的texCoords,否则你需要不同的顶点
对于每一行。这样你也可以使 texCoord 依赖于
行的屏幕空间长度。
如果你画三角形(使用
多边形模式 GL_LINE)。然后你必须做三角线
在几何着色器中变换自己,放入三角形
并放出线条(这也可能是弃用的原因
未来的多边形模式,如果还没有的话)。
虽然这个问题是关于 OpenGL 的,但基本原理是完全一样的,你只需要将着色器从答案映射到 HLSL,考虑到它们的简单性,这应该不会太难。