javascript - 阴影没有出现在 Three.js 的场景中?

标签 javascript three.js shadow

相机:

 Camera = new THREE.PerspectiveCamera(45, Width / Height, 0.1, 10000);
 Camera.position.set( 150, 400, 400);
  Scene.add(Camera);

 Light = new THREE.SpotLight(0xffccff,.5, 0, Math.PI/2, 1);

Light.position.set(0, 2000, 0);
Light.castShadow = true;
Light.shadowBias = -0.0002;

Light.shadowCameraNear = 850;
Light.shadowCameraFar = 8000;
Light.shadowCameraFov = 600;
Light.shadowDarkness = .7;

Light.shadowMapWidth = 2048;
Light.shadowMapHeight = 2048;
Scene.add(Light);

渲染器

 Renderer = new THREE.WebGLRenderer({
    antialias: true,
    sortObjects: false,
    preserveDrawingBuffer: true,
    shadowMapEnabled: true

});

    document.body.appendChild(Renderer.domElement);
    Renderer.shadowMap.type = THREE.PCFSoftShadowMap;
    Renderer.shadowMap.cullFace = THREE.CullFaceBack;
    Renderer.gammaInput = true;
    Renderer.gammaOutput = true;
    Renderer.setSize(window.innerWidth, window.innerHeight);

我使用这个功能来添加3d模型

 function getModel(path,texture) {

            var Material = new THREE.MeshPhongMaterial({shading: THREE.SmoothShading,
                specular: 0xff9900,
                shininess: 0,
                side: THREE.DoubleSide,
                shading: THREE.SmoothShading

            });


           Loader = new THREE.JSONLoader();
            Loader.load(path,function(geometry){

                geometry.mergeVertices();
                geometry.computeFaceNormals();
                geometry.computeVertexNormals();

                TextureLoader.load(texture,function(texture){


                Mesh = new THREE.Mesh(geometry, Material);
                Mesh.material.map =texture;
                Mesh.material.map.wrapS = THREE.RepeatWrapping;
                Mesh.material.map.wrapT = THREE.RepeatWrapping;
                Mesh.material.map.repeat.set(38,38);
                //Mesh.position.y -= 1;
                Mesh.position.y = 160;
                    Mesh.position.x = 0;
                    Mesh.position.z = 0;
                Mesh.scale.set(40,40,40);
                Mesh.castShadow = true;
                Mesh.receiveShadow = true;
                Scene.add(Mesh);

                });
            });
        }

接收阴影的平面是

var planeGeometry = new THREE.PlaneBufferGeometry(100,100);
  var planematerial  = new THREE.MeshLambertMaterial(
  {
    shininess: 80,
    color: 0xffaaff,
    specular: 0xffffff
  });

var plane = new THREE.Mesh(planeGeometry,planematerial);
plane.rotation.x = - Math.PI / 2;
plane.position.set(0,100,0);
plane.scale.set( 10, 10, 10 );
plane.receiveShadow = true;
plane.castShadow = true;
Scene.add(plane);

我只是尝试调整灯光的位置并调整shadowCameraNear、Light.shadowCameraFar和Light.shadowCameraFov的值。但并非没有看到任何变化

最佳答案

相机位于 (150, 400, 400),转换阴影的物体位于 (0, 160, 0),接收阴影的物体位于 (0, 100, 0) 并且设置了shadowCameraNear截锥体850。也就是说,您的相机距离两个阴影对象分别约为 200 和 400 个单位,但您在平截头体附近查看的阴影距离为 850 个单位。调整你的定位。您可以设置

Light.shadowCameraVisible = true;

在 Debug模式下显示相机视锥体以提供帮助。

关于javascript - 阴影没有出现在 Three.js 的场景中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173507/

相关文章:

Javascript for 循环表现奇怪

android - 如何在android线性布局上获得阴影?

javascript 对象嵌套回调

javascript在函数内动态创建预定义的私有(private)变量

javascript - 如何让实例从原型(prototype)函数中删除自身是 JavaScript

javascript - 基于 Three.js 中新枢轴的对象动画旋转

javascript - Threejs 移除之前渲染的场景

three.js - 如何用Three JS让直线或者曲线发光?

带有背景图像的 CSS 插入文本阴影

objective-c - 从 subview 中删除阴影