试验室研究方向-课程中心.PPT

试验室研究方向-课程中心

视区变换 将视域归一化 视域与物体求交,视域之外的部分物体不参与显示过程 求交后的物体投影,并按照相应的视见区域大小[xmin, xmax]、 [ymin, ymax]、 [zmin, zmax]进行缩放 OpenGL中的变换矩阵 相机变换: 指定照相机位置和方向(也叫照相机坐标系统) 模型变换: 将物体在场景中移动,也可以视为从局部坐标系到全局坐标系 ModelView变换: 相机变换和模型变换的混合. 投影变换: 定义视域体并指向投影 视区变换: 将二维投影后的场景变换到绘制窗口. 相机坐标 照相机坐标系: 也叫视点坐标系统或者视见坐标系统. 它表示了在照相机后面看场景的坐标关系。X-Y平面是投影面(也叫平面),照相机一般往负z方向看。 相机变换的两种方法 保持相机不变,将物体(在世界坐标系统中)绕着相机旋转。 保持物体不变,将相机在世界坐标系统中变换。相机变换是物体变换的逆变换。 y x z -z eye 设置相机: “Look At” 相机 将相机放置到世界坐标系统中定义相机变换 glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z); up eye look Y Z X WCS x y z P0 Q0 VCS 从 LookAt 设置中计算相机变换 坐标系统 构成相机坐标系: v u n -n eye look 相机变换: OpenGL例子(Look At相机) Void DisplayScene () { glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0f, 0.0f, 0.0f); glLoadIdentity (); gluLookAt (0.0, 0.0, 10.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0); glBegin (GL_TRIANGLE); glVertex3f (10.0f, 0.0f, 0.0f); glVertex3f (0.0f, 10.0f, 0.0f); glVertex3f (-10.0f, 0.0f, 0.0f); glEnd(); glFlush (); } 设置相机的另一种方法: 变换场景 gluLookAt 函数显式地定义相机。另外一种方法式将场景进行旋转(glRotate)和平移(glTranslate) 同时,将相机置于缺省的世界坐标系统. 旋转和平移的累积效果构成了最终的相机变换. 当然, glTranslate 和 glRotate也可用作其他用途 OpenGL例子(变换场景) //viewing a scene centered at origin from +X direction: Void DisplayScene () glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0f, 0.0f, 0.0f); glLoadIdentity (); glTranslatef (0.0, 0.0, -10.0); glRotatef (-90.0, 0.0, 1.0, 0.0); // glBegin (GL_TRIANGLE); glVertex3f (10.0f, 0.0f, 0.0f); glVertex3f (0.0f, 10.0f, 0.0f); glVertex3f (-10.0f, 0.0f, 0.0f); glEnd(); glFlush (); } ModelView 矩阵 ModelView变换式建模矩阵M和相机变换V的乘积 C = VM 所有在OpenGL中的变换函数只能设置modelview 矩阵. 因此, ModelView 在物体被操作之前被调用. 例如: glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glScalef (2.0f, 2.0f, 2.0f); DrawScene (); ModelView 矩阵堆栈 矩阵堆栈的顶部矩阵就是当前的ModelView 矩阵 (C). glPushMatrix (): 将当前的矩阵加入

文档评论(0)

1亿VIP精品文档

相关文档