0

.dae メッシュが 1 つあり、メッシュの下に 7000*7000 平面がある非常に単純なシーンがあります。高い で照らしたいSpotLightので、メッシュが地面に影を落とします。しかし、何かが壊れているようです!をどれだけ高くSpotLightしても、飛行機が明るくなることはありません!また、小さな正方形 (周囲) にある間は、メッシュを少しだけ明るくします。

ここで状況を見ることができます: スクリーンショット 1、ほとんどすべてが暗い

メッシュ (モンスター) を動かすとすぐに、もう点灯しません。

これは、ライトをインスタンス化する方法です。

// create a spotlight
self.spotLight = new THREE.SpotLight();

// set its position
self.spotLight.position.y = 1000; //I recon it needs to be relatively high so it lights up everything
self.spotLight.position.x = 0; //(0, 0) are the coordinates where the mesh is spawned, and are the center of the plane
self.spotLight.position.z = 0;
self.spotLight.castShadow = true;

飛行機はこんな風に作られています。

//The plane.
self.plane = new THREE.Mesh(new THREE.PlaneGeometry(self.groundSize, self.groundSize), new THREE.MeshLambertMaterial({color: 0x5C8A00}));
self.plane.receiveShadow = true;
self.plane.position.x = 0;
self.plane.position.y = -26;
self.plane.position.z = 0;

また、ここに別の写真があります。今回は、たくさん追加しましたPointLights

スクリーンショット 2、すべてが点灯しています。

影がまだ消えている様子がわかります!

さて、私はここで何が間違っていますか?私の知る限り、光はすべての方向に均等に分散するはずです! また、別の問題があります。シーンに複数のスポットライトを追加できないようです! これを行うと、すべてが完全に遅くなります - これは意図されたものですか? たぶん、それらすべてでシャドウを有効にしたためです...

@ニール、あなたのコードでも同じことが起こります!

ここに画像の説明を入力

4

1 に答える 1

4

Lambert マテリアルを使用した平面と、影を落としている回転キューブを示すjsfiddleを作成しました。

編集

いくつかのパラメーターをいじってみてください。デモのクリッピングを停止するには、次のようにします。

spotLight.shadowCameraFov = 70;

更新デモと移動デモ

于 2012-05-29T13:29:57.910 に答える