三个JS:如何将场景渲染到纹理并暂时覆盖材质?

时间:2014-03-11 21:39:19

标签: javascript three.js

我有一个普通物体的场景。他们投射和接收阴影。地面是THREE.Plane的一个实例。

目标: 我希望通过将场景渲染到纹理(rtt)然后将信息读回到js来获取有关阴影的信息。

思想: 我将使用正交相机从场景顶部渲染我的场景。属性附近的相机将被设置为仅渲染对象的一部分,它接触地面(我确保每个对象都有双面材质)。地面将呈现白色材料颜色,所有其他物体呈现黑色。材料应该可以投射阴影,地面应该能够接收它们。

问题:

  1. 如何使用临时不同的物体材质渲染当前场景(我不想在每次需要获取阴影信息时复制它)?

    renderer.render(scene, cameraRTT, rtTexture, true);
    
  2. 如何定义此类材料?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用scene的overrideMaterial属性在渲染步骤之间切换材质,例如:

// Note: r66 code
// use material A
scene.overrideMaterial = materialA;
renderer.render(scene, camera, rtTexture);
// use material B
scene.overrideMaterial = materialB;
renderer.render(scene, camera, rtTexture);

您可以在此处查看示例: http://threejs.org/examples/webgl_postprocessing_godrays.html