В настоящее время я пытаюсь создать функцию Perspective, которая дает проекцию для OpenGL. Я создал много, много способов, последнюю реплицирующую функцию GLM, которая ее обрабатывает (я должен использовать свой собственный класс Matrix4 для моего назначения). Независимо от того, какой код я пытаюсь, я всегда получаю неправильные числа по сравнению с GLM, что приводит к тому, что мой куб только рендерит с помощью GLM.Матрица проекции дает неправильные результаты
Они оба инициализированы с тем же переменными
glm::mat4 ProjectionGLM = glm::perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f);
Matrix4 Projection = Matrix4::Perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f);
функция Perspective
Matrix4 Matrix4::Perspective(double fov, double aspect, double zNear, double zFar) {
double fovy = fov * 0.0174532925;
double const tanHalfFovy = tan(fovy/2.0f);
Matrix4 temp;
temp.data[0][0] = 1.0f/(aspect * tanHalfFovy);
temp.data[1][1] = 1.0f/(tanHalfFovy);
temp.data[2][2] = -(zFar + zNear)/(zFar - zNear);
temp.data[2][3] = -1.0f;
temp.data[3][2] = -(2.0f * zFar * zNear)/(zFar - zNear);
return temp;
кодом непосредственно смоделированные GLM-х, за вычетом static_cast-х и шаблонами. Это та же математика, что и многие другие функции, которые я пробовал. Однако результирующая матрица отличается.
GLM результат
1.34444320 0 0 0
0 1.79259098 0 0
0 0 -1.00200200 -1.00000000
0 0 -0.200200200 0
Мои результаты
1.81066012 0 0 0
0 2.41421366 0 0
0 0 -1.00200200 -1.00000000
0 0 -0.200200200 0
Любая идея о том, что может быть не так с моей точки зрения функции или что GLM можно было бы делать по-другому?
Ссылка на моей математической библиотеки (только .h и .cpp файлов) https://mega.co.nz/#!lokhCBaB!5r7GwpWhEZ-tUcXV_ccxmQvZgRwIVU8K7dlIffVqZic
GLM использует радианы, код градусов ... – peppe
Это может быть уместным: HTTP: //stackoverflow.com/questions/3058552/raw-opengl -equivillant-of-gluperspective – NoChance
Я конвертирую FoV в радианы в первой строке функции. –