Поворот вокруг оси Y GluLookAt - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь повернуть зрителя вокруг оси Y.У меня есть функция с именем tranform_eye(), которая будет вычислять следующую позицию eyex, eyey и eyez после каждого обновления.

Может кто-нибудь помочь мне выяснить, как рассчитать значения для eyex, eyey и eyez?

Мой код:

float eyex = 5;
float eyey = 5;
float eyez = 5;

void display() {

    transform_eye();

    glMatrixMode(GL_PROJECTION);     // To operate on model-view matrix
    glLoadIdentity();
    gluPerspective(40.0, 1.0, 1.0, 10000.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    gluLookAt(eyex, eyey, eyez,
              0.0, 0.0, 0.0,
              0.0, 1.0, 0.0);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear color and depth buffers

    drawTriangles();

    glutSwapBuffers();  // Swap the front and back frame buffers (double buffering)
}

void transform(){
    /// calculate new eyex, y z.
}

1 Ответ

0 голосов
/ 25 февраля 2019

Применяя математику, например, этот ответ дает нам:

void transform()
{
    float theta = 0.01; //angle in radians to rotate every frame
    float cosTheta = cos(theta);
    float sinTheta = sin(theta);
    float newX = cosTheta * eyeX + sinTheta * eyeZ;
    eyeZ = -sinTheta * eyeX + cosTheta * eyeZ;
    eyeX = newX;
}
...