OpenGL: Почему Fovy должен быть неизменным при изменении размера окнаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 OpenGL: Почему Fovy должен быть неизменным при изменении размера окна

Сообщение Anonymous »

В 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»