Как сделать так, чтобы свет оставался неподвижным в мире с Direct3D - PullRequest
5 голосов
/ 16 сентября 2008

Я использую OpenGL в течение многих лет, но после попытки использовать D3D в первый раз я потратил много времени, пытаясь понять, как сделать так, чтобы огни моей сцены оставались неподвижными в мире, а не фиксированными на моих объектах. .

В OpenGL положения источников света преобразуются так же, как и все остальное с помощью матрицы MODELVIEW, поэтому, чтобы источники света фиксировались в пространстве, вы настраиваете MODELVIEW так, как вам нужно для источников света, и вызываете glLightPosition, затем настраиваете его для своей геометрии и делать вызовы геометрии. В D3D это не помогает.

(Комментарий - в конце концов я нашел ответ на этот вопрос, но я не смог найти ничего полезного в Интернете или в MSDN. Это сэкономило бы мне несколько часов от царапин на голове, если бы я мог найти это ответь тогда.)

Ответы [ 2 ]

1 голос
/ 16 сентября 2008

Ответ, который я обнаружил в конечном итоге, заключался в том, что, хотя OpenGL имеет только одну объединенную матрицу MODELVIEW, в D3D преобразования "мир" и "вид" хранятся отдельно, и, как представляется, основной причиной этого является размещение источников света. Поэтому ответ заключается в том, что вы используете D3DTS_VIEW для настройки матриц, которые должны применяться к вашим источникам света, и D3DTS_WORLD для настройки матриц, которые применяются для размещения вашей геометрии в мире.

Таким образом, на самом деле система D3D имеет больше смысла, чем способ OpenGL. Это позволяет вам указывать ваши световые позиции всякий раз, когда и где, черт возьми, вы чувствуете, что хотите раз и навсегда, без необходимости постоянно перемещать их так, чтобы они трансформировались вашим текущим преобразованием «вида». OpenGL должен работать таким образом, потому что он просто не знает, что, по вашему мнению, ваш «взгляд» против вашей «модели». Это всего лишь модельный взгляд на GL.

(Комментарий - извинения, если я не должен отвечать на свои вопросы здесь, но это был реальный вопрос, который я задал несколько недель назад и подумал, что стоит опубликовать здесь, чтобы помочь другим сделать переход от OpenGL к D3D Основные обзоры освещения и рендеринга D3D, кажется, трудно найти.)

0 голосов
/ 16 сентября 2008

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

...