私は、固定された太陽と月と太陽を周回する移動する地球を含むjsfiddleを持っています。three.js r75 point間違った場所に暗い影があります
ここでは、2つのLights(AmbientおよびPoint)オブジェクトとサンプルオブジェクトのコードを示します。
var light2 = new THREE.AmbientLight(0x444444);//... for lighting the Sun and other MeshBasicMaterial meshes.
scene.add(light2);
//... PointLight
// http://threejs.org/docs/#Reference/Lights/PointLight
var light3 = new THREE.PointLight(0xffffff, 10, 150000,1);
light3.castShadow = true;
light3.shadow.camera.near = 1;
light3.shadow.camera.far = 5000;
light3.shadow.camera.fov = 90;
// light3.shadowCameraVisible = true;
light3.shadow.bias = 0.001;
scene.add(light3);
// SPHERES
var sphereGeom = new THREE.SphereGeometry(40, 32, 16);
var SunMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 });
this.Sun01 = new THREE.Mesh(sphereGeom.clone(), SunMaterial);
Sun01.position.set(-500, 0, 220);
scene.add(Sun01);
//Sun01.castShadow = false;
//Sun01.receiveShadow = false;
light3.position.set(Sun01.position.x, Sun01.position.y , Sun01.position.z);
var moonMaterial = new THREE.MeshPhongMaterial({ color: 0xaa00aa });
var Moon02 = new THREE.Mesh(sphereGeom.clone(), moonMaterial);
Moon02.scale.set(0.5,0.5,0.5);
Moon02.position.set(-200, 0, 220);
scene.add(Moon02);
Moon02.castShadow = true;
Moon02.receiveShadow = false;
2つの問題があります。
まず、離れた固定された月は、範囲内であっても、PointLightによって照らされません。
2番目に遠い月からの影は、地球が太陽よりも近くにあるにもかかわらず、太陽の軌道上に現れます。
内部の固定された月(Moon02、色のマゼンタ)は、PointLightによって照らされ、地球上に影を投じることに注意してください。
renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0x000022);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
//... Enable Shadows
renderer.shadowMap.enabled = true;//.shadowMapEnabled = true;
//renderer.shadowMap.type = THREE.BasicShadowMap;//
//renderer.shadowMap.type = THREE.PCFShadowMap
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
私の質問=(a)は、外側の衛星を照らすと、(b)は表示されません外衛星の影を確実にするために何をすべきか - :ここで
はレンダラのセットアップコードであります(地球に近い、地球に近い)惑星地球上で。
はなく、私のアプリは芸術の作品ではありません「オブジェクトはダースで十分な時に互いに離れる千台をする必要がない理由は絶対にありません」 - それは、科学と人工距離単位を導入している望ましくありません。 「すべての距離とスケールを10分の1に減らす」というのは大きな問題です。私はなぜthree.jsが大きな距離で問題を起こすべきかを見ることができません。しかし、(うまくいけば一時的な)回避策のおかげで:-)。 – steveOw
@steveOw距離は任意です。たとえあなたのアプリが科学的であっても、THREE.jsの中であなたが舞台裏で望むどのようなユニットであれ、それらを変換するのは簡単ではないので使用できます。それが実際の距離の精神モデルを維持するのに役立つならば、1000のようなすてきなクリーンナンバーで割って、何百万キロメートル(何でも)の代わりに何百万ものメートルで考える。 – jered
また、通常はTHREE.jsには大きな距離の大きな問題はありませんが、ここで問題を起こすのはPointLightだけだと思います。投射された「光線」は距離の2乗として広がるので、あらゆる方向の光と影を投影するのは難しいので、遠くまでしか行けません。比較したDirectionalLightは広がらず、その光線は永遠に平行であり、計算がずっと簡単です。あなたが他のすべてを変えるのではなく微調整することができる、文書化されていない "スケールファクタ"のようなものがあるかもしれませんが、私はそれを知らないのです。 – jered