围绕带纹理的多边形旋转相机,同时查看它 - OpenGL

Rotate camera around a textured polygon while looking at it - OpenGL

我有一个带有位图图像纹理的简单纹理多边形。

glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _textureId);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);

    //Front face

    glNormal3f(0.0, 0.0f, 1.0f);
    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);

    glEnd();

我想绕着物体旋转,让它正对着我。 我怎样才能改变相机的位置?

在 OpenGL 中,您可以使用 gluLookAt 函数在 space 中移动。

将相机视为 space 中的一个点。
前3个参数决定了你的位置。
接下来的 3 个参数决定了 space 中的另一个点,相机将注视的位置。

这里我合成了一张图:(卡通人物转自here

在图片中你可以看到一个人站在 pos.x、pos.y、pos.z 的位置看着某个点(红点)look.x、look.y, look.z;

upVec 只是一个确定头部方向的向量。

this post Carlos Scheidegger中简要解释了upVec的作用:

The intuition behind the "up" vector in gluLookAt is simple: Look at anything. Now tilt your head 90 degrees. Where you are hasn't changed, the direction you're looking at hasn't changed, but the image in your retina clearly has. What's the difference? Where the top of your head is pointing to. That's the up vector.

在大多数情况下,您希望将 upVec 设置为 (0,1,0),因为在大多数情况下这是您头部的方向。