【发布时间】:2013-08-10 23:06:26
【问题描述】:
我在自己的 DirectX 11 游戏引擎中使用 Bullet Physics,我想使用 Bullet 提供的调试绘制类。基本上,您正在创建一个类,该类接收应由项目符号绘制的所有线条。有没有一种简单快捷的方法可以在 DirectX 11 中绘制一条 3D 线(最好不使用缓冲区和着色器之类的东西)?
【问题讨论】:
-
你要告诉我DirectX11没有办法画线吗???有人吗??
我在自己的 DirectX 11 游戏引擎中使用 Bullet Physics,我想使用 Bullet 提供的调试绘制类。基本上,您正在创建一个类,该类接收应由项目符号绘制的所有线条。有没有一种简单快捷的方法可以在 DirectX 11 中绘制一条 3D 线(最好不使用缓冲区和着色器之类的东西)?
【问题讨论】:
不幸的是,没有简单的方法。您需要使用线点创建一个顶点缓冲区。如果要绘制多条线,请将所有顶点放在一个缓冲区中以优化性能。
因为 FFP 在 DirectX 10 中已被移除,所以您需要一个简单的着色器。顶点着色器可能只是通过视图和投影变换来转换顶点,而像素着色器返回一个恒定的颜色(取决于您的需要)。
然后您将使用适当的拓扑(线列表)绘制顶点缓冲区。
之所以没有简单的方法(例如 Jesus Ramos 的回答或 OpenGL 的 glBegin(GL_LINES))是因为它们无法有效地实现。总是需要向 GPU 传输比需要更多的数据。这就是程序员使用缓冲区编写高效代码的原因。
【讨论】:
使用LP3DXLINE 并调用D3DXCreateLine 绘制一条简单的线。使用长度为 2(开始、结束)的数组为您的线路调用 Draw,它应该可以工作。
编辑:这显然只是 DX9。在这里留下答案以防万一它对其他人有帮助。
【讨论】:
LP3DXLINE 时,我只得到 2 个指向这个 StackOverflow 问题的链接!
在发光的线框中使用三角形并使两个顶点位于相同位置的任何机会: x1y1z1,x2y2z2,x2y2z2 我在 DBPro 中这样做并且它有效。
【讨论】: