Я пытаюсь вычислить матрицу lookat самостоятельно, вместо того, чтобы использовать gluLookAt ().
Моя проблема в том, что моя матрица не работает. использование тех же параметров на gluLookAt работает, однако.
мой способ создания матрицы lookat:
Vector3 Eye, At, Up; //these should be parameters =)
Vector3 zaxis = At - Eye; zaxis.Normalize();
Vector3 xaxis = Vector3::Cross(Up, zaxis); xaxis.Normalize();
Vector3 yaxis = Vector3::Cross(zaxis, xaxis); yaxis.Normalize();
float r[16] =
{
xaxis.x, yaxis.x, zaxis.x, 0,
xaxis.y, yaxis.y, zaxis.y, 0,
xaxis.z, yaxis.z, zaxis.z, 0,
0, 0, 0, 1,
};
Matrix Rotation;
memcpy(Rotation.values, r, sizeof(r));
float t[16] =
{
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
-Eye.x, -Eye.y, -Eye.z, 1,
};
Matrix Translation;
memcpy(Translation.values, t, sizeof(t));
View = Rotation * Translation; // i tried reversing this as well (translation*rotation)
Теперь, когда я пытаюсь использовать эту матрицу, вызывая glMultMatrixf, в моем движке ничего не появляется, хотя при использовании тех же значений eye, lookat и up для gluLookAt работает отлично, как я уже говорил.
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(View);
проблема должна быть где-то в коде, который я выложил здесь, я знаю, что проблема не в моих классах Vector3 / Matrix, потому что они отлично работают при создании матрицы проекции.