Iphone OpenGl ES 1.1: Как изменить центр камеры с (0,0,0) на (x, y, z)? - PullRequest
3 голосов
/ 15 сентября 2011

Например, центр моего объекта (1,2, -1).Как я могу изменить центр открытых "камер" (центр системы координат) с (0,0,0) до (1,2, -1)

Если я не ошибаюсь, gluLookAt являетсяодин для этого, но он не включен в OpenGLES 1.1.Есть ли другая функция, которая делает то же самое

1 Ответ

2 голосов
/ 15 сентября 2011

gluLookAt просто умножает текущую матрицу на четко определенную матрицу, созданную из входных данных. Его справочная страница содержит необходимые вам формулы.

Так, например:

void mygluLookAt(GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat centreX, GLfloat centreY, GLfloat centreZ, GLfloat upX, GLfloat upY, GLfloat upZ)
{
    GLfloat f[3] =
    {
        centreX - eyeX,
        centreY - eyeY,
        centreZ - eyeZ,
    };

    // make f and the up vector have unit length
    GLfloat lengthOfF = sqrtf(f[0]*f[0] + f[1]*f[1] + f[2]*f[2]);
    f[0] /= lengthOfF;
    f[1] /= lengthOfF;
    f[2] /= lengthOfF;

    GLfloat lengthOfUp = sqrtf(upX*upX + upY*upY + upZ*upZ);
    upX /= lengthOfUp;
    upY /= lengthOfUp;
    upZ /= lengthOfUp;

    // use the cross product of f and Up to get s,
    // and the cross product of s and f to get u
    GLfloat s[3] =
    {
        f[1]*upZ - upY*f[2],
        f[2]*upX - upZ*f[0],
        f[0]*upY - upX*f[1]
    };

    GLfloat u[3] =
    {
        s[1]*f[2] - f[1]*s[2],
        s[2]*f[0] - f[2]*s[0],
        s[0]*f[1] - f[0]*s[1]
    };

    // Fill the matrix as prescribed.
    // Note: OpenGL is "column major"
    GLfloat M[16] =
    {
          s[0], u[0], -f[0], 0.0f,
          s[1], u[1], -f[1], 0.0f,
          s[2], u[2], -f[2], 0.0f,
          0.0f, 0.0f, 0.0f,  1.0f
    };

    glMultMatrixf(M);
    glTranslatef(-eyeX, -eyeY, -eyeZ);
}

Это набрано прямо здесь, со страницы руководства.Так что это не проверено, но должно быть легко обнаружить, если я сделал какие-либо ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...