Нормализованные координаты для OpenGL

Я пытался обрезать изображение на экране, ограничивая громкость просмотра, используя glFrustum, В официальной документации для Glfrustumупоминается, что left, right, top, bottom, near, far координаты отсечения. Я подумал, что это координаты экрана, и попытался сделать:

glFrustum(100, 924, 100, 668, 3, 1000);

Выше ничего не показывалось мне на экране. Итак, я просто где-то посмотрел и увидел следующий код (но почему эти координаты отрицательные?):

glFrustum(-1, 1, -1, 1, 0.5, 1000);

Я использовал ту же самую вещь и начал получать некоторую часть изображения на экране. Впоследствии я начал играть с координатами near и заметил, как меняется громкость просмотра.

glFrustum(-10,10,-10,10,10,1000);
glFrustum(-100,100,-100,100,100,1000);
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000);

Все вышеперечисленное давало мне одинаковый вывод изображений на экране. Но в большинстве мест, где я наблюдал использование glFrustum, я заметил, что значения используются где-то из [-1,1] (такие как Вот) и люди говорят о вычислениях в нормированном диапазоне. Почему делает расчет для left, right, bottom, top, near, far важно (близко и далеко также включены в нормализованные значения?) с точки зрения нормализованных значений? Можно ли выполнять те же операции, используя значения в экранных координатах?

1

Решение

Прежде всего, glFrustum не зависит от вашего разрешения экрана.

Эта функция определяет объем, в котором будет нарисована сцена, то есть все элементы вашего экрана, которые выбрасываются за пределы этого объема, будут игнорироваться / вырезаться.
Координаты для glFrustum относятся к вашей сцене, а не к экрану.

введите описание изображения здесь

Примите во внимание, что для правильного представления другие параметры должны быть правильно настроены, такие как поворот / перемещение сцены и т. Д.

glFrustum(-10,10,-10,10,10,1000);
glFrustum(-100,100,-100,100,100,1000);
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000);

Все вышеперечисленное давало мне одинаковый вывод изображений на экране

Не совсем, если ваша 3D-модель находится рядом с POV (Камара), пример 2 обрежет ее там, где пример 3 не будет. Но при увеличении / уменьшении «ближнего» расстояния пропорционально «левому», «верхнему», «нижнему» и «правому» результат будет аналогичным.

2

Другие решения

Эти аргументы находятся не в системе координат (пространстве), как вы думаете. Я нашел это для вас: http://www.matrix44.net/cms/notes/opengl-3d-graphics/coordinate-systems-in-opengl

0

По вопросам рекламы [email protected]