OpenGL | 放置摄像机gluLookAt函数

一、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);

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/128893876