Я только что получил новый компьютер и теперь должен запустить мою демонстрационную программу с SDL2/OpenGL. Я использовал программу для опробования различных техник и использовал gluLookAt (который, очевидно, больше не должен был использоваться или даже никогда не должен был использоваться).
Теперь я ищу способ заменить метод gluLookAt построением матрицы преобразования, делающей то же самое, что и gluLookAt. Я наткнулся на это, утверждающее, что оно может быть полезной заменой gluLookAt (ответ - не вопрос).
Моя реализация выглядит так (я предполагаю, что j ^ k
означает перекрестное произведение j и k - поправьте меня, если я ошибаюсь):
//Compat method: gluLookAt deprecated
void util_compat_gluLookAt(GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat lookAtX, GLfloat lookAtY, GLfloat lookAtZ, GLfloat upX, GLfloat upY, GLfloat upZ) {
Vector3f up (upX, upY, upZ);
Vector3f lookAt (-lookAtX, -lookAtY, -lookAtZ);
Vector3f eye (eyeX, eyeY, eyeZ);
Vector3f i = up ^ lookAt;
Matrix4x4 mat (new GLfloat[16]
{i.getX(), upX, lookAt.getX(), 0,
i.getY(), upY, lookAt.getY(), 0,
i.getZ(), upZ, lookAt.getZ(), 0,
0, 0, 0, 1});
Vector3f translate = mat * (Vector3f()-eye); // Not yet correctly implemented: Negative of vector eye ([0,0,0]-[eyeX,eyeY,eyeZ])
mat.setItem(3,0,translate.getX());
mat.setItem(3,1,translate.getX());
mat.setItem(3,2,translate.getX());
glMultMatrixf(mat.transpose().getComponents());
}
Кто сделал что-то не так - мой источник информации или я? И как я могу это исправить? ПРИМЕЧАНИЕ. Я не буду использовать это в своем реальном проекте, но мне все еще нужно это для моей демонстрационной программы, которая также будет проверена для оценки.