2016-07-26 3 views
0

私はスペースに設定されたゲームで作業してきました。つまり、プレイヤーは太陽系を通過することができます。ThreeJSはシーンの位置を変換します

この問題は、プレーヤーが遠ざかり、Float32の精度問題が発生したときに発生します。 私はこの問題を解決するために数時間は探してきましたが、今まで何も助けてくれませんでした。

私が試したのは、すべてのメッシュを初期のスケールより約100倍小さい小さなものに再スケーリングすることでしたが、大きな座標に達すると同じように動作します。

もう一つの解決策は、プレイヤーではなく、世界のポジションを翻訳することです。しかし、私は正直なところ、どのように各メッシュの位置を変えずにこれを達成するかという手がかりがありません。

レンダラも{ logarithmicDepthBuffer: true}に設定しましたが、それでも私は役に立たなくなりました。プレーヤーのモデルがジャンプしてちらつき始めます。

私はこの問題を解決するための解決策を見つけようと多くの時間を費やしました。何かアドバイスをいただければ幸いです。

答えて

1

あなたが使用することができ、あなたのシーンを移動するには:

scene.translateX(i); 
scene.translateY(i); 
scene.translateZ(i); 

私はオフセット既存の位置からの増分です。これは、あなたに最初の人の動きの錯覚を与えることができます。 非常に大きなシーンの一般的な解決策です。

+0

'scene.translate'は私を助けませんでしたが、それは、プレーヤーがナビゲートする反対の方向に位置が変更される他のすべてのメッシュを含む新しい' Object3D'を作成するというアイデアを与えました。 –

+0

これを間違った方法でやってはいけません。私は助けようとしています。 SceneはObject3dを継承していることに注意してください。その意味で、すでにFog、multiMaterial、およびAutoUpdateが追加されたのはObject3dです。これをObject3dとして使用するには、何もする必要はありません。実際には、もう1つのObject3dにすべてを配置するだけで、コールスタックとメモリフットプリントに追加するだけです。私は概念的には、あなたの太陽系の起源とカメラの位置の関係を理解することはSceneにとってより難しいことを理解していますが、考慮する必要があります。 – Radio

関連する問題