gpt4 book ai didi

three.js - 三个 JS 在 gltf 上转换阴影不起作用

转载 作者:行者123 更新时间:2023-12-02 18:49:44 26 4
gpt4 key购买 nike

我还是新手,为什么模型没有转换任何阴影?我启用了环境光和定向光

// import model
const loader = new THREE.GLTFLoader();
loader.load( 'object/GalaxyS10.gltf', function ( gltf ) {
scene.add( gltf.scene );

}, undefined, function ( error ) {
console.error( error );
}
);
loader.castShadow = true;

最佳答案

不幸的是,您的帖子遗漏了很多细节。通常,您必须执行以下操作才能获得适当的阴影:

  • GLTFLoader.castShadow 不存在。设置它无效。
  • 您必须将 renderer.shadowMap.enabled = true; 添加到您的代码中才能全局启用阴影。
  • 您必须在阴影转换光上启用阴影。由于您使用的是定向光,因此典型代码如下所示。请注意,阴影视锥体的配置取决于场景的比例。您可以通过 CameraHelper 直观地调试视锥体。
const light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 0, 10, - 10 );
light.castShadow = true;
light.shadow.camera.top = 2;
light.shadow.camera.bottom = - 2;
light.shadow.camera.left = - 2;
light.shadow.camera.right = 2;
light.shadow.camera.near = 0.1;
light.shadow.camera.far = 10;
scene.add( light );

// scene.add( new THREE.CameraHelper( light.shadow.camera ) );
  • 您需要某种接收阴影的地面或其他物体。对于这些 3D 对象,您必须将 receiveShadow 设置为 true
  • 您必须通过将相应的属性设置为 true 来定义哪些对象应该转换 阴影。您没有在代码段中执行此操作。它应该是这样的:
gltf.scene.traverse( function ( object ) {

if ( object.isMesh ) object.castShadow = true;

} );

关于three.js - 三个 JS 在 gltf 上转换阴影不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66949832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com