我已经在简单的立即模式下使用 OpenGL 有一段时间了,并试图通过显示列表传递到保留模式(我很遗憾地了解到它已经被弃用了一段时间)。我想知道的是,当我输入:
glNewList(list, GL_COMPILE);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0f, 0.0f);
for (int i = 0; i < 10; i++)
{
glVertex2f(radius * cos(i * 2.0f * PI / 9.0f), radius * sin(i * 2.0f * PI / 9.0f));
}
glEnd();
glEndList();
OpenGL 会预先计算 for 循环中的所有 10 个顶点并将它们发送到已烘焙的显卡,例如:
glVertex2f(0.5f, 0.0f);
glVertex2f(0.499f, 0.0055f);
//so and so forth 10 times...
或者它是否尝试对每一帧都进行 for 循环(以及许多 sin / cos 操作)?换句话说,将这样的圆形存储在显示列表中(其余的使用 glTranslatef、glRotatef 等)以避免每次帧更新中的三角运算是否合理,或者根本没有性能提升?
编辑:为避免混淆,我打算使用 for 循环创建此显示列表一次,然后在每个帧更新中通过glCallList(list)调用它(即glutDisplayFunc())。我不会为每一帧创建一个列表。