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

时间:2008-09-16 12:30:00

标签: directx direct3d lighting

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

在OpenGL中,光线位置与其他所有光线位置一起变换,因此为了在空间中修复光线,您可以按照自己想要的方式设置模型,并调用glLightPosition,然后根据几何体设置它。进行几何调用。在D3D中没有帮助。

(评论 - 我最终找到了这个问题的答案,但我在网上或MSDN中找不到任何有用的东西。如果我能找到这个,它会让我节省几个小时的头脑那么回答。)

2 个答案:

答案 0 :(得分:1)

我最终发现的答案是,虽然OpenGL只有一个合并的MODELVIEW矩阵,但在D3D中,“世界”和“视图”变换是分开的,放置灯光似乎是这个的主要原因。 。因此,答案是您使用D3DTS_VIEW设置应该应用于灯光的矩阵,并D3DTS_WORLD设置适用于世界中几何体位置的矩阵。

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

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

答案 1 :(得分:0)

对于固定功能管道,灯的位置和方向在世界空间中设置。轻型结构的文档确实告诉了你,但我对你在文档中错过它并不感到惊讶。关于固定功能管道的信息不多,因为重点是可编程着色器。