2

Q1:我有一个 3D 模型,它有一个顶点数组。每个元素都有 x、y 和 z 值。现在我创建了一个动态 vbo 缓冲区来在 OpenGL 中渲染这个数组。问题是我必须更新每一帧的所有顶点[这取决于一些逻辑。但可以肯定的是,这不是一个简单的转换:我的意思是它不能对所有顶点使用单个转换矩阵来完成。现在对于每一帧,我映射 vbo 缓冲区,然后更新数据并取消映射,然后渲染它。更新在 for 循环中完成。现在我想知道有没有更快的方法来做到这一点?

几点:我必须更新所有顶点。这是我的要求,我不能使用顶点子集。

Q2:我必须重新计算法线,因为顶点已经更新。为了平滑着色,我需要在一个缓慢的顶点处获取所有法线的结果。有没有更快的方法呢?基本上更快地重新计算法线以实现平滑着色。

我已经知道的一些事情:

  1. 使用 SSE 优化正常计算。
  2. 使用 TBB 或 openMP 来并行化循环。
4

1 回答 1

1

我认为转换反馈是您正在寻找的。

使用变换反馈,您可以在运行时修改顶点数据并将其用于另一个渲染,所有这些操作都可以通过 GPU 本身在顶点着色器中使用变换反馈来实现。

它在 Opengl 3.0 及更高版本中受支持。

是一个关于如何使用转换反馈的简单示例。

是有关反馈缓冲区使用的一些详细信息。

于 2013-01-23T09:39:24.663 回答