Javascript ThreeJS:如何将场景渲染为纹理并临时覆盖材质?

Javascript ThreeJS:如何将场景渲染为纹理并临时覆盖材质?,javascript,three.js,Javascript,Three.js,基础: 我有一个普通物体的场景。他们投射和接收阴影。地面是三维平面的一个实例 目标: 我希望通过将场景渲染为纹理(rtt),然后将信息读回js来获取有关阴影的信息 创意: 我将使用正交摄影机渲染场景,从顶部观察场景。“Camera near”属性将设置为仅渲染对象接触地面的部分(我已确保每个对象具有双面材质)。地面将使用白色材质颜色渲染,所有其他对象将使用黑色渲染。材质应该可以投射阴影,地面应该能够接收阴影 问题: 如何使用暂时不同的对象材质渲染当前场景(我不希望每次需要获取阴影信息时都复制它)

基础: 我有一个普通物体的场景。他们投射和接收阴影。地面是三维平面的一个实例

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

创意: 我将使用正交摄影机渲染场景,从顶部观察场景。“Camera near”属性将设置为仅渲染对象接触地面的部分(我已确保每个对象具有双面材质)。地面将使用白色材质颜色渲染,所有其他对象将使用黑色渲染。材质应该可以投射阴影,地面应该能够接收阴影

问题:

  • 如何使用暂时不同的对象材质渲染当前场景(我不希望每次需要获取阴影信息时都复制它)

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

  • 可以尝试使用场景的OverrideMatary属性在渲染步骤之间切换材质,例如:

    // 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);
    
    您可以在此处查看示例:

    我不太清楚你在问什么,但这个three.js演示的来源可能会帮助你:。