Я думаю, что ваш вопрос возникает из-за смешения «пространства просмотра» с «пространством постпроекции». Они не одинаковы.
Пространство обзора или пространство камеры — это пространство сцены относительно камеры. Таким образом, камера находится в начале координат и смотрит вниз по оси -Z, а +Y направлена вверх. С точки зрения фиксированной функции OpenGL пространство камеры — это пространство после умножения позиций и нормалей на матрицу GL_MODELVIEW
.
Постпроекционное пространство — это то, что вы получаете после умножения значений пространства камеры на матрицу GL_PROJECTION
. Именно поэтому существуют две отдельные матрицы. Вы делаете освещение в пространстве камеры и отправляете постпроекционные позиции на растеризацию.
OpenGL не выполняет освещение в постпроекционном пространстве. Таким образом, соотношение сторон, масштабирование камеры и т. д. не влияют на освещение. Перспектива также не разделяется.
Вычисляет ли фиксированный конвейер функций OpenGL освещение в пространстве просмотра?
Да, и вы должны.
Если да, то как он справляется с преобразованиями вида с неравномерным масштабом? Собственно, как он вообще справляется с трансформациями вида, включающими любой масштаб?
Точно так же, как он справляется с преобразованием модели в мир, включая масштаб.
Это просто матрица. Математика не знает и не заботится о том, где происходит конкретное преобразование масштаба, будь то часть модели-мира или часть мира-камеры. Важно только наличие шкалы. Или перекос или любая другая форма преобразования.
И помните: намного более вероятно, что преобразование модели в мир использует масштаб, чем преобразование мира в камеру. Скорее всего, вам потребуется масштабировать геометрию, чтобы она соответствовала миру, а не масштабировать геометрию для матрицы камеры. Масштабирование масштабирования камеры, соотношения сторон и т. п. является частью матрицы перспективы, а не матрицы камеры.
С этим он «справляется» обычным образом: нормали преобразуются обратным транспонированием матрицы модели в вид. Это изменяет нормали (полное раскрытие: это мой учебник по электронной книге ), чтобы они по-прежнему соответствовали модели после масштабирования. Это необходимо независимо от того, в каком пространстве вы находитесь.
Если это так, то масштабирование пространства просмотра приведет к разным расстояниям от источника света до вершины, а это означает, что интенсивность освещения для точечных источников света будет меняться по мере масштабирования матрицы вида.
... и? Поскольку все объекты трансформируются с помощью одной и той же матрицы камеры (в пределах одной сцены), ко всем объектам будет применен одинаковый масштаб. Следовательно, если все они были в одном масштабе в мировом пространстве, то все они будут в одном масштабе и в пространстве камеры.
Так в чем проблема? Да, затухание меняется, но одинаково для всех объектов. Таким образом, проблем нет, если ваши коэффициенты затухания рассчитаны на это пространство камеры.
person
Nicol Bolas
schedule
31.05.2012