Einige der Shadow-Map-Eigenschaften wurden in den letzten Versionen umbenannt, aber sie funktionieren grundsätzlich gleich.
den Renderer für Shadow-Maps einrichten (und die mehr Rechen teuer Schatten Kartentyp Auswahl):
var renderer = new THREE.WebGLRenderer();
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap
das Licht einrichten (beachten Sie, wie es funktioniert auch mit THREE.PointLight):
var light = new THREE.PointLight(0xffffff, 1, 100);
light.position.set(0, 12, 0);
light.castShadow = true; // default false
light.shadow.mapSize.width = 1024; // default 512
light.shadow.mapSize.height = 1024; // default 512
light.shadow.camera.near = 2; // default 0.5
light.shadow.camera.far = 100; // default 500
//light.shadow.camera.left = 500 // Not sure about this one +
// right, top and bottom, Do they still do anything?
scene.add(light);
Sie werden über alle diese API-Änderungen benachrichtigt, wenn Sie Ihre Konsole überprüfen, wenn Sie versuchen, die in der aktuellen Dokumentation angegebenen Eigenschaften zu verwenden.
Sie Objekte erstellen, die Schatten wirft und erhält die gleiche wie zuvor:
//Creating box
var boxGeometry = new THREE.BoxGeometry(1, 1, 1);
var boxMaterial = new THREE.MeshPhongMaterial({ color: 0xdddddd, specular: 0x999999, shininess: 15, shading: THREE.FlatShading });
var box = new THREE.Mesh(boxGeometry, boxMaterial);
box.castShadow = true;
scene.add(box);
creating plane
var planeGeometry = new THREE.PlaneGeometry(20, 20, 32, 32);
var planeMaterial = new THREE.MeshPhongMaterial({ color: 0x00dddd, specular: 0x009900, shininess: 10, shading: THREE.FlatShading })
var plane = new THREE.Mesh(planeGeometry, planeMaterial);
plane.receiveShadow = true;
scene.add(plane);
das Flugzeug unter der Box platzieren und es wird einen Schatten erhalten.
Hier ist ein funktionierendes codepen example
EDIT In der aktuellen Version von Three.js, muss die Szene mindestens zweimal für den Schatten zu erbringenden zu zeigen.
DREI.js r75.
In diesem Fall, was ist das absolute Minimum einen Grund Schatten zu bekommen? Muss ich shadowMap.type hinzufügen? In meinem Lernprogramm bestand die einzige Konsolenwarnung darin, "shadowMap.enabled" anstelle von "shadowMapEnabled" zu verwenden. Das ist mein Code - http://codepen.io/estevancarlos/pen/pyVONK – rpeg
@rpeg Ah, ich denke, es ist ein Fehler in der aktuellen Version von THREE.js. Beim ersten Rendern der Szene wird die Shadowmap nicht angezeigt. Sie müssen es ein zweites Mal rendern. Tun Sie einfach: 'renderer.render (Szene, Kamera);' atleast zweimal. Und Sie müssen 'shadowMap.type',' shadow.camera.near/far' oder 'shadow.mapSize.height/width' nicht einstellen. Alle diese haben Standardwerte. – micnil