Код: Выделить всё
int main()
{
glutReshapeFunc(reshape);
// Skip the render loop
}
void reshape(int width, int height)
{
w = width;
h = height;
glViewport(0, 0, w, h);
float aspect = (float) w / (float) h;
float zNear = 0.1;
float zFar = 99.0;
float fovy = glm::radians(45.0f);
projection = glm::perspective(fovy,aspect,zNear,zFar); // Why is fovy unchanged?
// Now send the updated projection matrix to the shader
glUniformMatrix4fv(projectionPos, 1, GL_FALSE, &projection[0][0]);
}
< /code>
Я не понимаю, почему Fovy (поле зрения в направлении Y) является постоянной в этой функции. Я думаю, что это должно быть < /p>
float fovy = 2*glm::atan(h/(2*zNear)); // arc tangent
< /code>
Viewport эквивалентен ближней плоскости. Если высота просмотра увеличена или уменьшена, не должен ли FOV также меняться соответственно? Поскольку определение поля зрения является углом от нижней части экрана (ViewPort) до верхней части экрана (ViewPort).
Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-window