用堆栈来管理矩阵
·glLoadIdentity();------使栈顶矩阵为单位矩阵
·glPushMatrix(); -------将栈顶矩阵复制一份,入栈
·glPopMatrix(); -------退栈
矩阵的组合变换
几何变换
- 模型变换--Model transformation
- 视点变换--View transformation
glMatrixMode(GL_MODELVIEW)---不论什么,都看做模型变换
Void gluLookAt(eyex,eyey,eyez,centryx,centryy,centryz,upx,upy,upz)
视点位置 视点聚焦的位置 物体头部朝向
全局变换与局部变换
- 只有一次变换(旋转、平移、缩放),则全局与局部变换效果一样
- 多个变换组合,效果一般不同
- 局部变换= -(全局变换的组合顺序)~~~OpenGL 中变换语句顺序与实际矩阵相乘实现相反
投影
Perspective projection(透视投影)
Parallel projection(平行投影)
投影变化:给定视点、视线方向,计算出当前顶点的投影点坐标
·投影变换也是用矩阵来实现的
·专门管理投影矩阵的堆栈:glMatrixMode(GL_PROJECTION);
视口变换------图像变形
Void glViewport(GLint x,GLinty,GLsizei width,GLsizei height);
设置当前窗口中的视口区域
参数中的值以屏幕像素为单位
投影函数(如gluPerspective())定义了投影窗口的大小比例;
glViewport()定义了视口的大小比例
glViewport(0,0,w,h);
gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,30.0);
设置第2个参数为w/h的目的:保持投影窗口与视口的比例一致,使其不变形
三维几何空间中的坐标系与单位
坐标系:
OpenGL的默认坐标系和默认视点位置 ·右手坐标系
·默认视点在原点
·视线方向是z轴负方向
单位:
三维空间(视锥体空间)中的单位:无绝对单位,有相对大小
设定物体大小以什么为依据:视锥体
是否需要根据视口大小来设定物体大小?
Void glViewport(GLint x,GLinty,GLsizei width,GLsizei height);
glViewport()参数中的值都是以屏幕像素为单位的
二者单位不同,视口大小只与视锥体窗口有比例的关系,无绝对大小关系
物体大小与视口无关,需根据视锥体大小来设定物体大小-----物体大小与其在视口中所占面积大小无关