最好的方法来更新openGL中的所有顶点数据并重新计算法线

时间:2013-01-23 08:36:16

标签: opengl 3d vbo

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

有些观点: 我必须更新所有顶点。这是我的要求,我无法使用顶点子集。

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

我已经知道的一些事情:

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

1 个答案:

答案 0 :(得分:0)

我认为变换反馈正是您所寻找的。

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

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

Here是如何使用transfrom反馈的简单示例。

here是有关反馈缓冲区使用情况的一些细节。