140 likes | 476 Views
OpenGL 变换. 2008 级 严默函. 变换常用的函数. 旋转: glRotatef(angle, rx, ry, rz) 平移: glTranslate(tx,ty,tz) 缩放: glScalef(kx,ky,kz). 旋转变换 glRotatef( ,x,y,z). 作用:当前矩阵与变换矩阵相乘. 函数中第一个参数是表示目标沿从点 (x, y, z) 到原点的方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前矩阵。 矩阵形式如下:向量 (x,y,z) 单位化 (nx,ny,nz).
E N D
OpenGL变换 2008级 严默函
变换常用的函数 • 旋转: glRotatef(angle, rx, ry, rz) • 平移: glTranslate(tx,ty,tz) • 缩放:glScalef(kx,ky,kz)
旋转变换glRotatef( ,x,y,z) 作用:当前矩阵与变换矩阵相乘 函数中第一个参数是表示目标沿从点(x, y, z)到原点的方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前矩阵。 矩阵形式如下:向量(x,y,z)单位化(nx,ny,nz)
缩放:glScalef(kx,ky,kz) • 三个函数参数值就是目标分别沿三个轴向缩放的比例因子。这个函数表示用这三个比例因子生成的矩阵乘以当前矩阵。这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。 公式:
平移: glTranslate(△x, △y, △z) • 三个函数参数就是目标分别沿三个轴向平移的偏移量。这个函数表示用这三个偏移量生成的矩阵(齐次矩阵)乘以当前矩阵。
第一步:视点变换 • 设置照相机在视点坐标系中的位置。 • 变换过程: glMatrixMode(GL_MODELVIEW); glLoadIdentity() void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz ); 通常相机位置缺省值同场景中的物体一样,都在原点处,而且相机初始方向都指向Z负轴。
第二步:模型变换 模型变换是在世界坐标系中进行的。调整物体位置 glMatrixMode(GL_MODELVIEW); glLoadIdentity() 平移:glTranslatef()、 旋转:glRotatef() 缩放:glScalef()。
第三步:投影变换 • 投影变换,选择相机镜头,调焦,使三维物体投影在二维胶片上. • 位置:视点设置之后 • glMatrixMode(GL_PROJECTION); • glLoadIdentity(); • 投影方式选择:正投影,透视投影
投影方式选择 • 正投影: 正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。 • void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble GLdouble near,GLdouble far)
投影方式选择 • 透视投影: • 透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小, gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); zNear ,zFar为距离镜头的距离,永远为正值
第四步:视口变换 视口变换,决定二维像片的大小,位置(相片底版如何洗到相纸上面) glViewport(GLint x,GLint y,GLsizei width, GLsizei height); 左下角为(0,0)点。