为要绘制的每个项目调用gluLookAt()



伪代码:

drawScene() {
    for(every 3Dobject) {
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(eye, targ, up); //is there a better way?
        3Dobject[n].draw(); //this involves calling translations / rotations
    }
    //of course theres 2D GUI stuff to draw next

这是正确的(或者至少不是可怕的)方式吗?

您可能根本不应该调用glLookAt。您肯定不希望将每个对象都绘制在屏幕的中间。您对对象更改模型视图矩阵而不将其放回有问题吗?使用glPushMatrixglPopMatrix,而不是重复look-at计算。

不,只需调用一次即可"设置相机",然后绘制所有对象,然后通过在世界空间中应用它们自己的变换进行相应的变换。

编辑:正如Ben Voigt所建议的,您应该适当地推动和弹出以保留此变换,直到绘制完所有对象为止。

示例:

gluLookAt(...);
//it is essential to track this state, since there are multiple stacks
glMatrixMode(GL_MODELVIEW); 
for(object : objects){
    glPushMatrix();
    glMultMatrix(object.transform);
    draw(object);
    glPopMatrix();
}

我还想提到的是,在更新的OpenGL版本/配置文件中,此功能已被弃用。

相关内容

  • 没有找到相关文章

最新更新