视点变换:
gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,
GLdouble centerx,GLdouble centery,GLdouble centerz,
GLdouble upx,GLdouble upy,GLdouble upz);
该函数定义一个视图矩阵,并与当前矩阵相乘。eyex, eyey,eyez 指定视点的位置,也就是眼睛的坐标。centerx,centery,centerz 指定参考点的位置,通常是场景中心轴线上的点。upx,upy,upz 指定视点向上的方向也就是头的朝向,可不要歪着哈。比如:
gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//这个就表示头顶是朝着y方向
gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0);//这个表示头歪了45度,头顶朝着(1.0,1.0,0.0)这个方向
模型变换:
glTranslatef(x,y,z):
使绘图坐标系相对世界坐标系沿x,y,z轴移动x,y,z个单位。
其作用就是将你绘点坐标的原点在当前原点的基础上平移一个(x,y,z)向量
glRotatef(angle,x,y,z):
和glTranslatef()属于一类函数,glTranslatef()是平移,glRotatef是旋转。
其作用就是使当前绘图坐标系绕世界坐标系的x,y,z旋转angle个角度,x,y,z的值非0既1。angle方向满足右手定则。
比如glRotatef(30,1.0f,0.0f,0.0f)就是绕x轴旋转30度,glRotatef(30,1.0f,1.0f,0.0f)就是绕x,y的夹角线旋转30度。
glScalef(x,y,z):
该函数对物体沿着x,y,z轴进行放大缩小,缺省值都为1.0。
调用了glScalef()后,下边绘制的坐标都全部乘以函数的参数。例glScalef(0.5,0.5,0.5),点(2.0,3.0,1.0)就会变成(1.0,1.5,0.5)。
投影变换:
1、正射投影
void glOrtho(GLdouble left,GLdouble right,
GLdouble bottom,GLdouble top,
GLdouble near,GLdouble far)
它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。
另一个函数是:
void gluOrtho2D(GLdouble left,GLdouble right,
GLdouble bottom,GLdouble top)
它是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为(right,top)的矩形。
2、透视投影
void glFrustum(GLdouble left,GLdouble Right,
GLdouble bottom,GLdouble top,
GLdouble near,GLdouble far);
它创建一个透视视景体。其操作是创建一个透视投影矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far是远裁剪平面的Z负值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far表示离视点的远近,它们总为正值。
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);
它也创建一个对称透视视景体,但它的参数定义于前面的不同,如图所示。其操作是创建一个对称的透视投影矩阵,并且用这个矩阵乘以当前矩阵。参数fovy定义视野在X-Z平面的角度,范围是[0.0,180.0];参数aspect是投影平面宽度与高度的比率;参数zNear和Far分别是远近裁剪面沿Z负轴到视点的距离,它们总为正值。
posted on
浙公网安备 33010602011771号