1

我最近了解到:

glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();

并不是真的如何完成。我一直在使用opengl-tutorial.org上的教程,它向我介绍了 VBO。现在我将它全部迁移到一个类中并试图完善我的理解。
我的情况与类似。我了解如何使用矩阵进行旋转,我可以自己完成所有操作,然后将其交给 gl 和朋友。但是我敢肯定那效率要低得多,并且会涉及与显卡的更多通信。该网站上的教程 17 展示了如何旋转事物,它使用:

// Send our transformation to the currently bound shader, 
// in the "MVP" uniform
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
glUniformMatrix4fv(ModelMatrixID, 1, GL_FALSE, &ModelMatrix[0][0]);
glUniformMatrix4fv(ViewMatrixID, 1, GL_FALSE, &ViewMatrix[0][0]);

旋转对象。我认为这比我能生产的任何东西都更有效率。我想做的是做这样的事情,但只将矩阵乘以一些网格,而不将网格分成几块(因为这会破坏三角形-顶点-索引关系,我最终会手动将它缝合在一起)。
有单独的功能吗?是否有一些更高级别的库来处理我应该使用的网格和骨骼(正如对其他人的一些回复似乎暗示的那样)?我不想再次陷入使用过时和低效的东西,只是为了以后再次重做所有事情。

4

2 回答 2

1

制服之所以如此命名,是因为它们是统一的:在渲染调用过程中不变。着色器只能对输入值(每个输入类型提供。顶点着色器的每个顶点,片段着色器的每个片段等)、制服(对于单个渲染调用是固定的)和全局变量(它们是为着色器的每个实例化重置为其原始值)。

如果您想在单个渲染调用中对对象的不同部分执行不同的操作,则必须根据输入变量执行此操作,因为在单个渲染调用中只有输入会发生变化。听起来您正在尝试使用矩阵蒙皮或对象层次结构做某事,因此您可能希望为每个顶点提供矩阵索引或其他内容作为输入。您使用此索引来查找统一矩阵数组以获取您要使用的实际矩阵。

于 2013-03-28T23:58:34.957 回答
0
于 2013-03-29T10:59:58.137 回答