Я пытался обрезать изображение на экране, ограничивая громкость просмотра, используя 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
важно (близко и далеко также включены в нормализованные значения?) с точки зрения нормализованных значений? Можно ли выполнять те же операции, используя значения в экранных координатах?
Прежде всего, 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 не будет. Но при увеличении / уменьшении «ближнего» расстояния пропорционально «левому», «верхнему», «нижнему» и «правому» результат будет аналогичным.
Эти аргументы находятся не в системе координат (пространстве), как вы думаете. Я нашел это для вас: http://www.matrix44.net/cms/notes/opengl-3d-graphics/coordinate-systems-in-opengl