【问题标题】:DirectX 11 - Bullet Debug DrawDirectX 11 - 子弹调试绘图
【发布时间】:2013-08-10 23:06:26
【问题描述】:

我在自己的 DirectX 11 游戏引擎中使用 Bullet Physics,我想使用 Bullet 提供的调试绘制类。基本上,您正在创建一个类,该类接收应由项目符号绘制的所有线条。有没有一种简单快捷的方法可以在 DirectX 11 中绘制一条 3D 线(最好不使用缓冲区和着色器之类的东西)?

【问题讨论】:

  • 你要告诉我DirectX11没有办法画线吗???有人吗??

标签: c++ directx lines bullet


【解决方案1】:

不幸的是,没有简单的方法。您需要使用线点创建一个顶点缓冲区。如果要绘制多条线,请将所有顶点放在一个缓冲区中以优化性能。

因为 FFP 在 DirectX 10 中已被移除,所以您需要一个简单的着色器。顶点着色器可能只是通过视图和投影变换来转换顶点,而像素着色器返回一个恒定的颜色(取决于您的需要)。

然后您将使用适当的拓扑(线列表)绘制顶点缓冲区。

之所以没有简单的方法(例如 Jesus Ramos 的回答或 OpenGL 的 glBegin(GL_LINES))是因为它们无法有效地实现。总是需要向 GPU 传输比需要更多的数据。这就是程序员使用缓冲区编写高效代码的原因。

【讨论】:

  • 好吧,无论如何,谢谢。唯一的问题是,我必须经常重新创建缓冲区,因为必须绘制的线条数量变化很大......这就是我寻求无缓冲方法的原因。
  • 我假设重新创建缓冲区意味着更改其数据。创建缓冲区需要很长时间。
  • 没有。我的意思是重新创造。我知道,更改它的数据(更新它)会更快,但是需要存储在缓冲区中的顶点数量变化很大(可能是每一帧)。这就是为什么我不想使用缓冲区...
  • 然后使用足够大的缓冲区。它可以有一些未分配的空间。如果这妨碍了娱乐。您可以维护不同大小的缓冲区,并根据您的顶点数据选择合适的缓冲区。
  • 我尝试使用大缓冲区并留下未分配的空间。它工作得很好,但是如果我只为 1 条线(所以 2 个顶点)创建一个缓冲区并为每条线进行实例化绘图,它会有效吗?
【解决方案2】:

使用LP3DXLINE 并调用D3DXCreateLine 绘制一条简单的线。使用长度为 2(开始、结束)的数组为您的线路调用 Draw,它应该可以工作。

编辑:这显然只是 DX9。在这里留下答案以防万一它对其他人有帮助。

【讨论】:

  • 有趣的是,当我在 Google 上搜索 LP3DXLINE 时,我只得到 2 个指向这个 StackOverflow 问题的链接!
  • 另外,这些功能仅适用于 DirectX 9!我正在使用 DirectX 11。
  • @theCNG27 我只做过 dx9。我停止了 dx 开发并切换到 opengl 并且再也没有回去。我只是从以前的内存耗尽:)
【解决方案3】:

在发光的线框中使用三角形并使两个顶点位于相同位置的任何机会: x1y1z1,x2y2z2,x2y2z2 我在 DBPro 中这样做并且它有效。

【讨论】:

  • 这是可能的,但您仍然需要一个缓冲区来绘制这些三角形。用缓冲区画线是没有问题的,但没有缓冲区是不可能的。我通过每帧多次使用一个缓冲区解决了这个问题。因此,我不受缓冲区大小的限制,而且完全是动态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2010-12-28
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多