NOTE|投影矩阵和模型视角矩阵

glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
----------------------------------------------------------------------------
投影和模型视角从矩阵上来说是分开的两个矩阵,但是有先后
一般见到的都是先设置投影矩阵(透视 or 正投),然后设置模型视角

在此给出如下建议:
1. 视角使用gluLookAt函数显式设置,在此之后的所有平移,旋转或者综合矩阵全部都认为是对模型的课件位置改变--------------- 本条针对一般文档中的以下说法:render函数中MODELVIEW状态下第一个gl调用为 glTranslate(0,0,-5),既可以看作是把模型向Z轴负向移动5个单位,也可看作摄像机位置(视点)沿Z轴正向移动5个单位----典型的“故意”将MODEL和VIEW混淆; 此种混淆是不利于空间建模的(到底动的是哪个);

GL 中对3D操作矩阵的流程可总结如下:

设定投影方式(glPro... glOrtho),摆好摄像机(gluLookAt), 摆放你的空间模型(Translate,Rotate,MultiMatrix....)

2. 那么到底动哪个?
场景漫游:房间里走动,飞行游戏,改变摄像机位置,在render中调用gluLookAt,参数随位置改变

固定视角场景:外部视角坦克游戏,坦克位置随方向键移动

综合: 3D滚球,球在3D场景中动,视角跟着球动

3:glPushMatrix和glPopMatrix应用场合
一般情况下主要在模型构建过程中需要用到,比如:
一台车四个轮子,每个轮子上6组螺栓
首先对轮子建模,构造壹个List
然后朝车子上装四个轮子
glMultiMatrix(CAR_INIT_POSITION_MATRIX);
glCallList(CAR_BODY_ID);

glPushMatrix();
glMultiMatrix(WHEEL_RF_ON_CAR_POSITION_MATRIX); //右前轮相对车子的位置
glCallList(WHEEL_ID);
glPopMatrix();

glPushMatrix();
glMultiMatrix(WHEEL_LF_ON_CAR_POSITION_MATRIX); //左前轮相对车子的位置
glCallList(WHEEL_ID);
glPopMatrix();


glPushMatrix();
glMultiMatrix(WHEEL_RR_ON_CAR_POSITION_MATRIX); //右后轮相对车子的位置
glCallList(WHEEL_ID);
glPopMatrix();

glPushMatrix();
glMultiMatrix(WHEEL_LR_ON_CAR_POSITION_MATRIX); //左后轮相对车子的位置
glCallList(WHEEL_ID);
glPopMatrix();

//----------------- CAR CONSTRUCTED

    推荐阅读