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