最近のバージョンでは、シャドウマップのプロパティの名前が変更されていますが、基本的に同じように動作します。
シャドウマップのレンダラーを設定する(そしてより多くの計算高価なシャドウマップの種類を選択):
var renderer = new THREE.WebGLRenderer();
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap
光(それはまた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);
を
現在のドキュメントで指定されたプロパティを使用しようとしているときにコンソールをチェックすると、これらのAPIの変更がすべて通知されます。あなたの影を投げかけると受け取るオブジェクトの作成
は前と同じである:
//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);
は、ボックスの下に平面を配置し、それが影を受け取ることになります。ここで
がTHREE.jsの現在のバージョンで作業codepen example
EDIT で、シーンは表示する影のために少なくとも二回レンダリングする必要があります。ここで
、基本的な影を取得するための最低限は何が含まれて? shadowMap.typeを追加する必要がありますか?私のチュートリアルでは、「shadowMapEnabled」の代わりに「shadowMap.enabled」を使用するという唯一のコンソール警告がありました。これは私のコードです - http://codepen.io/estevancarlos/pen/pyVONK – rpeg
@rpegああ、私はそれがTHREE.jsの現行バージョンのバグだと思います。最初にシーンがレンダリングされると、シャドウマップは表示されません。もう一度レンダリングする必要があります。ただしてください: 'renderer.render(シーン、カメラ);'少なくとも2回。そして、あなたは 'shadowMap.type'、' shadow.camera.near/far'または 'shadow.mapSize.height/width'を設定する必要はありません。これらはすべてデフォルト値を持ちます。 – micnil