我是shang的opengl新手,在尝试在绘图循环中渲染多个对象时遇到了麻烦。
所有对象都在VAO中组织,它们被复制到CPU内存中 模型空间。 这意味着如果一个对象的位置,旋转或缩放发生变化,我必须更改并重新计算绘图调用之间的主矩阵。
只要我只渲染一个对象,一切正常。 我的理解是我将模型或mvp矩阵的地址传递给着色器。 如果我改变 - 外部 - 它在不同对象的绘制之间的内容, 它们将使用此变量的不同内容绘制。 我不想重新计算着色器内部的内容,因为它们的值仍然存在 与当前对象的整个网格相同。
这不起作用 - 应用matix一次并绘制所有对象 及其价值观。
如何在必须渲染多个对象的游戏引擎中完成 一个绘图循环。
提前致谢
答案 0 :(得分:0)
在典型的渲染周期中,每个对象都有自己的变换,必须独立于其他所有变换进行计算。您不需要重新计算视图或透视变换。
因此,您的典型渲染周期将如下所示:
对于每个对象:
glDrawArrays
。从这个循环中可以看出,每个变换对每个对象都是唯一的。其他任何情况都不是这样。 VAO和材料可以重复使用,视图和投影矩阵也可以重复使用。
所以,你不在gpu上计算矩阵,你在cpu上计算矩阵,然后将结果作为统一发送到着色器。