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

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

Сообщение Anonymous »

В GLUT мы можем зарегистрировать обратный вызов, когда размер просмотра будет изменен < /p>

Код: Выделить всё

int main()
{
glutReshapeFunc(reshape);
// Skip the render loop
}

И часто функция 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++»