我正在用webgl开发体积渲染应用程序,而我要做的最后一件事就是创建一个照明模型。我已经准备好一切,但是我无法在场景中获得灯光位置。我以这种方式添加灯光:

 var light = new THREE.DirectionalLight(0xFFFFFF, 1);
 light.position.set(0.5, 0.5, 0.1).normalize();
 camera.add(light);


我将光附加到相机上,因为如果我用相机移动,则需要使光源静止。
问题是,我正在使用ShaderMaterial(自定义着色器)。我找不到任何表示灯光位置的统一变量。我已经搜索过,应该设置:

material.lights = true;


但它导致了错误。

Uncaught TypeError: Cannot set property 'value' of undefined


我试图在顶点着色器中添加常量矢量,但是我需要乘以逆视图矩阵(如果我是对的)。但是GLSL 1.0不支持逆函数。我有想法通过制服将反视图矩阵发送到着色器,但是我不知道在JS哪里可以得到场景的视图矩阵。

感谢帮助。我已经尝试了一切:( ...

再见

最佳答案

如果要将灯光添加为相机的子代并设置material.lights = true,则必须将相机添加为场景的子代。

scene.add( camera );


three.js r.57

关于javascript - 自定义着色器中的灯光位置(着色器 Material ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15657023/

10-12 12:16
查看更多