3种类型的变换:视图变换、模型变换和投影变换。
OpenGL变换术语总结:
视图(Viewing):指定观察者或照相机的位置;
模型(Modeling):在场景中移动物体;
模型视图(Modelview):描述视图和模型变换的对偶性;
投影(Projection):改变可视区域的大小或重新设置它的形状;
视口(Viewport):这是一种伪变换,只是对窗口上的最终输出进行缩放;
两种类型的投影:正投影和透视投影。
GLUT函数库:
glutWireCube()//函数可以绘制一个立方体。
glutSolidSphere()//函数可以绘制一个实心球。
模型视图矩阵:
移动:
glTranslatef();
旋转:
glRotatef(GLfloat angel,GLfloat x,GLfloat y,GLfloat z);
缩放:
glScalef(GLfloat x,GLfloat y,GLfloat z);
把单位矩阵加载到模型视图矩阵:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
获得堆栈的深度最大值:
glGet(GL_MAX_MODELVIEW_STACK_DEPTH);
或
glGet(GL_MAX_PROJECTION_STACK_DEPTH);
矩阵堆栈:
保存视图变换:
glPushMatrix();
恢复视图变换:
glPopMatrix();
透视投影:
glFrustum();//定义一个平截头体。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);//函数的参数是垂直方向的视野角度,宽度与高度的纵横比,以及近端和远端裁剪平面之间的距离。
加载矩阵:
GLfloat m[] = {1.0f,0.0f,0.0f,0.0f, // X列
0.0f,1.0f,0.0f,0.0f, // Y列
0.0f,0.0f,1.0f,0.0f, // Z列
0.0f,0.0f,0.0f,1.0f // 移动
};
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(m); // 使用列主序的矩阵顺序
void glLoadTransposeMatrixf(GLfloat *m); // 使用行主序的矩阵顺序
圆环面绘制函数:
gltDrawTorus();