【发布时间】:2020-01-04 11:33:58
【问题描述】:
像许多 3d 图形程序一样,我有一堆对象,它们有自己的模型坐标(x、y 和 z 轴从 -1 到 1)。然后,我有一个矩阵,将它从模型坐标带到世界坐标(使用正在绘制的对象的位置、旋转和比例)。最后,我有第二个矩阵将这些世界坐标转换为标准坐标,OopenGL ES 2.0 将使用它来绘制到屏幕上。
所以,因为一个对象可以包含许多顶点,所有这些顶点都使用相同的变换到世界空间和规范坐标,计算这两个矩阵的乘积一次,并将每个顶点放入结果矩阵中会更快,而不是将每个顶点都放在两个矩阵中。
但是,据我所知,在 OpenGL ES 2.0 着色器中似乎没有办法让它计算一次矩阵,并一直使用它直到两个矩阵之一使用直到 glUniformMatrix4fv() (或另一个设置制服的函数)被调用。因此,似乎计算一次矩阵的唯一方法是在 CPU 上进行,然后使用统一的结果到 GPU。否则,当类似:
gl_Position = uProjection * uMV * aPosition;
它会一遍又一遍地计算它,这似乎会浪费时间。
那么,哪种方式通常被认为是标准的?还是有另一种我完全想念的方式?据我所知,OpenGL ES 2.0 编程指南中用于实现 OpenGL ES 1.1 流水线的着色器只使用了一个矩阵,那么用的更多吗?
【问题讨论】: