关于模型视图变换的一些理解

OpenGL可以通过glMatrixMode(GL_MODELVIEW)来修改模型视图矩阵的值。模型视图矩阵包含模型变换和视图变换,在OpenGL中经常将这两种变换混在一起进行讨论,这是因为我们关注的其实就是相机和物体之间的相对位置关系,这个相对位置可以通过变换相机或者通过变换物体来实现。
通过之前阅读OpenGL红宝书,可以改变模型变换的指令有glTranslate*()和glRotate*(),可以改变视图变换的矩阵有gluLookAt()。但之前通过gluLookAt()改变相机的朝向,然后将物体画到朝向相机的位置时总是得不到正确的结果。这个问题可以这样理解:将模型视图变换统一理解成一个相对位置变换关系而不是分为相机的变换和模型的变换,则我们可以将gluLookAt()也理解成对模型进行变换,所以下面在对模型进行变换的时候中间就不能调用glLoadIdentity(),否则相当于gluLookAt()这个变换没有起作用。还有一点需要注意的是,由于把gluLookAt()也理解成了模型变换,并且应该是最先调用的变换(视图变换函数必须在调用任何模型变换函数之前调用),所以它的前面应该加上glLoadIdentity(),以确保窗口的稳定。

感谢在这个过程中小P同学的帮助~

你可能感兴趣的:(OpenGL,变换)