2016-02-03 80 views
0

相機:three.js中沒有出現陰影?

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); 

       }); 
      }); 
     } 

與平面至r ecive陰影是

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); 

我只是試圖調整燈的位置和調整的。但不是沒有變化被看作

+0

也許你可以添加一個小提琴? – Wilt

+0

'Light.shadowCameraFov = 600;'? – gaitat

+1

'Light.shadowCameraNear = 850;'最有可能你的所有物體都不能從陰影相機看到。 – gaitat

回答

1

照相機是在shadowCameraNear,Light.shadowCameraFar和Light.shadowCameraFov的值(150 ,400,400)時,投射陰影的對象位於(0,160,0)處,接收陰影的對象位於(0,100,0),並且shadowCameraNear視錐體位於850.也就是說,您的相機是兩個陰影物體分別約有200個和400個單位,但你在近平截頭體上觀察的陰影是850個單位。調整你的位置。你可以設置

Light.shadowCameraVisible = true; 

在調試模式下顯示相機的視錐體幫助。

+0

Light.shadowCameraVisible已從three.js中刪除r73 – ArUn

+0

@ArUn感謝您指出這一點。關於threejs.org的文檔已過時。 r73本身會發出一個控制檯消息:「'THREE.Light:.shadowCameraVisible已被刪除,請改用新的THREE.CameraHelper(light.shadow)'''CameraHelper現在'顯示錐體,視線和相機的位置」這應該仍然有助於定位。如果改變立場解決問題,請讓我們知道並回答您的問題。 – pprchsvr