【问题标题】:ThreeJS update shadow for buffergeometryThreeJS 更新缓冲几何的阴影
【发布时间】:2020-09-29 16:05:55
【问题描述】:

我在 ThreeJS 中加载了一个模型 .gltf,其中包含一个改变对象形状的关键帧动画(它是一个点级动画)。它工作正常,但阴影没有改变! 我玩过geometry.computeVertexNormals(),但是当我应用它时,我的模型变成了全黑。

有人可以帮我解决这个问题吗?

谢谢, 西蒙娜

【问题讨论】:

    标签: javascript three.js shadow


    【解决方案1】:

    应该没有理由打电话给BufferGeometry.computeVertexNormals()。您可以通过执行以下操作启用阴影投射:

    gltf.scene.traverse( function ( object ) {
    
        if ( object.isMesh ) {
    
            object.castShadow = true;
    
        }
    
    }
    

    如果模型也应该接收阴影,请将属性 receiveShadows 也设置为 true

    您还需要在渲染器上启用阴影,正确配置灯光的阴影相机并确保地板具有可以接收阴影的材质(例如,不是MeshBasicMaterial)。像下面这样的例子可能是一个很好的方向:

    https://threejs.org/examples/webgl_animation_skinning_blending

    【讨论】:

    • 实际上我的对象已经投射了阴影,只是在形状改变时它不会更新:如果我用最后一个关键帧(变形的对象)导出模型,阴影是不同的,这意味着它可以工作只是在初始化...如果有帮助,我可以提供一些屏幕...
    • 您也可以分享live example吗?
    • 抱歉回复晚了,但我现在在澳大利亚,时区不同。我在两个 jsfiddle 上工作:那不是我的模型,但动画非常相似。第一个例子显示了顶点变化时阴影的变化(你也可以尝试改变光的位置)jsfiddle.net/fw5y309n/1 第二个,这就是我的模型发生的事情(我删除了这行代码 sphere.geometry.computeVertexNormals(); ) jsfiddle.net/f8qo1Lnc 但是如果我将 computeVertexNormals 添加到我的几何体中,我的模型就会完全变黑!你知道为什么吗?
    • 我没有提到这一点,也许可以提供帮助:我正在使用 BufferGeometry,而在小提琴中我提供的是 SphereGeometry。差别很大吗?
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多