nodec-project / nodec_game_engine

The game engine made with nodec framework.
https://contentsviewer.work/Master/nodec-game-engine/docs
Apache License 2.0
0 stars 0 forks source link

Fix unexpected behavior of physics object. #21

Closed ContentsViewer closed 1 year ago

ContentsViewer commented 1 year ago

物理オブジェクトの回転がおかしい

ContentsViewer commented 1 year ago

bullet3が計算した世界座標系のTransform行列をTranslate, Rotation(Quaternion)に分解して、前回との差分をlocal_position, local_rotationに累積しているのがよくないようだ。

bullet3が計算した世界座標系のTransform行列をそのままオブジェクトの姿勢に使うと問題ないようである。 Transform行列はbtTransform::getOpenGLMatrix()関数で取得できる。

今の、nodec_sceneでは、世界座標系の姿勢を直接設定できない。一度local_position, local_rotationに変換しないといけない。 エンジンは、local_position, local_rotationを使って再び世界座標を計算しなおしていた。 そこで、nodec_sceneに、世界座標系の姿勢を直接設定するためのLocalToWorldコンポーネントを追加した。 https://github.com/ContentsViewer/nodec/commit/4160f0379a80c2b6453d3fd95cd684da0d017b25

bullet3が計算したオブジェクトの世界座標系の姿勢行列をそのままLocalToWorldに代入することで、オブジェクトの動作が安定した。

24

(オブジェクトの姿勢をLocal座標系と世界座標系で指定できることになったが、これらの連携をうまくするのは別問題。。。)