一、gluLookAt函数
gluLookAt用来定义观察者(相机)的状态,包括观察者在世界坐标系中所处的位置、看向世界坐标系中的方向(可以理解为眼睛所看向的方向)、观察者头部的朝向(可以在一个平面上360°旋转)。
void WINAPI 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 相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)
二、应用
1.默认摄像机
OpenGL默认状态下的摄像机的信息为:
gluLookAt(0, 0, 0, 0, 0, -1, 0, 1, 0);
所以,绘制一个三角形的代码及默认绘制效果如下:
void Draw()
{
glClearColor(1, 1, 1, 1.0f); //白色背景
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity(); //重置矩阵设为单位矩阵
//绘制三角形
glBegin(GL_TRIANGLES); //注意是逆时针绘制
glColor4ub(0, 0, 255, 255); //蓝
glVertex3f(-0.2f, -0.2f, -1.0f);
glColor4ub(255, 0, 0, 255); //红
glVertex3f(0.2f, -0.2f, -1.0f);
glColor4ub(0, 255, 0, 255); //绿
glVertex3f(0.0f, 0.2f, -1.0f);
glEnd();
}
2.自定义摄像机
当放置摄像机为下方数据时(注意gluLookAt函数在glLoadIdentity之后),上述三角形绘制出的效果如下。
glLoadIdentity(); //重置矩阵设为单位矩阵
gluLookAt(0, 0, 0, 0, 0, -1, 0, -1, 0);