如何使用Direct3D使灯光在世界范围内保持固定

Bax*_*imo 5 directx direct3d lighting

我多年来一直在使用OpenGL,但是在第一次尝试使用D3D之后,我浪费了大量的时间来弄清楚如何使我的场景灯在世界上保持固定而不是固定在我的物体上.

在OpenGL中,光照位置就像使用MODELVIEW矩阵一样进行变换,因此为了在空间中修复灯光,您可以按照自己想要的方式设置模型,并调用glLightPosition然后为几何体设置它并进行几何调用.在D3D中没有帮助.

(评论 - 我最终找到了这个问题的答案,但我在网上或MSDN中找不到任何有用的东西.如果我能找到这个答案,那本可以省去几个小时. )

Bax*_*imo 2

我最终发现的答案是,虽然 OpenGL 只有一个合并MODELVIEW矩阵,但在 D3D 中,“世界”和“视图”变换是分开的,放置灯光似乎是造成这种情况的主要原因。所以答案是你用来D3DTS_VIEW设置适用于你的灯光的矩阵,并D3DTS_WORLD设置适用于你的几何体在世界中的放置的矩阵。

所以实际上 D3D 系统比 OpenGL 方式更有意义。它允许您随时随地指定您的灯光位置,您想一劳永逸,而不必不断地重新定位它们,以便它们根据您当前的“视图”变换进行变换。OpenGL 必须以这种方式工作,因为它根本不知道你认为你的“视图”与你的“模型”是什么。这只是 GL 的模型视图。

(评论 - 如果我不应该在这里回答我自己的问题,我很抱歉,但这是我几周前遇到的一个真实问题,我认为值得在这里发布以帮助其他人从 OpenGL 转向 D3D。基本概述D3D 光照和渲染管道的功能似乎很难实现。)