3

Blender を使用してモデルを作成し、それらを Libgdx にロードしています。以下のようにモデルの中央に Origin を使用してモデルを作成し、このコードを使用して剛体を作成すると、すべて正常に動作します

        Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);

ここに画像の説明を入力

ただし、モデルの下部をこのように地面と同じ高さに配置すると

ここに画像の説明を入力

次に、btRigidbody は次のようにオフセットされます

ここに画像の説明を入力

リジッドボディの高さをオフセットできる明白な方法はありますか?

どうもありがとう。

スプリッグシー

4

1 に答える 1

6

剛体の中心 (原点) は質量の中心と同じであるため、物理シミュレーションにとって重要な特性です。必要に応じてを使用してこの中心を「移動」することもできbtCompoundShapeますが、これは物理シミュレーションにも影響を与えるため、満足のいく結果が得られない可能性があります。

または、物理的起源と視覚的起源の違いを で補正することもできますbtMotionState。たとえば、指定された値にオフセットを含むインスタンスを掛けて設定ModelInstance#transformします (例を使用)。worldTransformMatrix4Matrix4#translate

ただし、これはおそらく必要以上に複雑になっているだけです。本当の問題は、なぜボディと比較してモデルの中心をオフセットしたいのかということです。たとえば、2 番目の画像では、モデルの中心が最初の画像と同じように見えます。を移動しただけで、基本的にメンバーNodeに初期値を提供することを示しています。これは、次ModelInstance#transformのようにインスタンス化することで実現できます。ModelInstance

modelInstance = new ModelInstance(model, "coneNode", true);

"coneNode"モデリング アプリケーションで作成したノードの名前に置き換えます。最後の ( ) 引数は、モデリング アプリケーションで指定した変換にメンバーをtrue設定するように ModelInstance に指示します。transform必要に応じて、modelInstance.transform.translate(x, y, z);またはを呼び出して、この変換に対してmodelInstance.transform.trn(x, y, z);modelInstance を移動できます。

これに関するより詳細な説明は、http: //blog.xoppa.com/loading-a-scene-with-libgdx/にあります。

これは、ノード変換をサポートするファイル形式 (ではなくなど)から作成された.g3dbまたは.g3dj ファイル (たとえば を使用) を使用している場合にのみ機能することに注意してください。fbx-conv.fbx .obj

于 2014-07-18T15:35:40.603 に答える