1.相机的位置就是视点。
2.OpenGL绕坐标轴旋转一个正的角度,就是从坐标轴的原点看向正半轴,顺时针旋转。
3.默认情况下,OpenGL视点的初始位置就是世界坐标系的原点,默认情况下:
a.视点的初始位置位于世界坐标系的原点;
b.OpenGL是右手坐标系,视点的初始方向和世界坐标系的Z轴负方向一致,初始视方向垂直于屏幕指向屏幕的内部;
c.视点的初始向上方向(UpDirection)和Y轴的正方一致;
d.视点的初始X方向和X轴的正方向一致
4.在调用gl.LookAt()方法前,必须先调用gl.LoadIdentity(),如下所示:
gl.LoadIdentity();
gl.LookAt(EyeX,EyeY,EyeZ,TargetX,TargetY,TargetZ,UpX,UpY,UpZ);
只有在之前调用了gl.LoadIdentity(),将模型视点矩阵重置,才能保证gl.LookAt()中的坐标参数都是世界坐标系中的坐标,如果未调用gl.LoadIdentity(),则gl.LookAt()很有可能出现问题, 达不到需要的效果。
5.在OpenGL使用的过程中,需要了解多个坐标系,其中最最常用的有三个:世界坐标系、模型的局部坐标系、Camera的视坐标系。
世界坐标系:这个坐标系模拟我们生活的真实的3D场景,在OpenGL中有且只有一个世界坐标系;
模型的局部坐标系:也称为本地坐标系(local coordinate)在进行了glLoadIdentity()之后,模型的局部坐标系和世界坐标系是重合 的,但是如果调用了glTranslate()或者glRotate(),模型的局部坐标系就会进行相应的平移和旋转。该坐标系以物体的中心为 坐标原点,物体的旋转、平移等操作都是以局部坐标系进行的。这时当物体模型进行旋 转、平移等操作时,局部坐标系也执行相 应的旋转、平移等操作。局部坐标系是一个假想的坐标系,该坐标系与物体的相对位置始终是不变的。在OpenGL中绘图时,都是 首先通过glTranslate、glRotate等来改变局部坐标系与世界坐标系的相对位置,然后在局部坐标系中用glVertexf等绘图,比如绘 制了一个点glVertexf(1,2,3),那么坐标(1,2,3)是局部坐标系中的坐标,而不是世界坐标系中的坐标。
在OpenGL中,视点变换和模型变换被当做一种变换来看待。改变视点的位置和改变模型的位置是一个相对的过程,例如将物体从(0.0, 0.0, 0.0)移至(0.0, 0.0, -1.0)相当于将相机从(0.0, 0.0, 0.0)移至(0.0, 0.0, 1.0)。视点变换、模型变换将被合并,形成模型视点矩阵。可以使用函数glMatrixMode(GL_MODELVIEW)来指定当前矩阵模式为模型视点变换。在代码中,视点变换在模型变换之前指定,但投影变换和视口变换可以在绘图之前的任意时候指定。
一些建议:
(1)视点变换采用gluLookAt来改变相机的位置,朝向以及向上方向。
(2)模型变换使用glTranslate, glRotate, glScale来进行平移,旋转,缩放反射,从而改变物体在场景中位置。