Почему ширина и высота делятся на 2 в матрице перспективной проекции?

9

Я использую OpenGL для изучения компьютерной графики. Я пытаюсь понять проекционные матрицы. Следующее показано в «Красной книге» OpenGL:

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

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

Я не понимаю, почему ширина и высота делятся на 2?

mikeglaz
источник

Ответы:

11

Поскольку не изменяется от , он изменяется от .ИкспроJ0весяdTчас-весяdTчас2весяdTчас2

Важна не ширина, а минимальное и максимальное значения . Поскольку находится в центре области просмотра, а не в углу, минимальное и максимальное значения составляют плюс и минус половина ширины.ИкспроJ(0,0)


Кстати, Красная книга не является хорошим введением в графику в целом. Это технический стандарт, а не учебник, поэтому объяснения концепций достаточно, чтобы быть однозначным - оно не пытается преподавать материал. В частности, речь идет о библиотеке рендеринга отсканированных линий, поэтому есть много важных концепций, которые она вообще не описывает, например, какие BRDF важны, как они соотносятся со свойствами поверхности реального мира, чем на самом деле является изображение и многие другие. техники более высокого уровня.

И, наконец, даже в этой области - о том, как использовать графический процессор для ускорения рендеринга - это ужасно устарело. Архитектура GL основана на графических процессорах 20 лет назад. Хотя было добавлено множество функций, чтобы идти в ногу с изменениями в оборудовании, фундаментальные абстракции не являются хорошим способом понимания современных архитектур графических процессоров.

Если вы хотите узнать о теории компьютерной графики, начните с подходящего учебника, такого как Физический рендеринг или Компьютерная графика: принципы и практика, или с онлайн-курса. Если вы хотите узнать, как создать 3D-приложение, начните с учебника о том, какое приложение вас интересует (например, если это игра, попробуйте учебник по Unity).

Дэн Халм
источник
Вау, это именно то, что я искал. Я начал читать учебник по линейной алгебре ... но какую математику мне нужно знать для физического рендеринга?
Микеглаз
2
Подождите, вы имели в виду "Потому что не отличается от "? ИкспроJ0весяdTчас
mikeglaz
Для openGL необходимо проецировать на нормализованные координаты устройства (от -1 до 1), поэтому он масштабируется от -Width / 2 до Width / 2
PaulHK
Вы должны задать еще один вопрос о PBR, но вот хороший ресурс: learnopengl.com/#!PBR/Theory
Алан Вулф,
@mikeglaz Я сделал, спасибо. Я бы сказал, что если вы знакомы с линейной алгеброй старшекурсников и школьной оптикой, вы в порядке. Любые детали, которые вы еще не поняли, вы уже сможете понять, прочитав соответствующую страницу Википедии.
Дан Халм