В GLUT мы можем зарегистрировать обратный вызов, когда размер просмотра будет изменен. И часто выглядит функция Reshape , которая изменяет матрицу проекции перспективы.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
OpenGL: Почему Fovy должен быть неизменным при изменении размера окна ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение