私は3Dモデルとlibgdxについて学んでいます。キーの押下に応じて3軸でモデルを回転しようとしています。私の問題は、私は1つの軸で回転できるが、他の2つは回転できないということです。libgdxは3軸のうちの2軸で3Dモデルを回転させていません
問題行動のビデオはここにある:https://www.youtube.com/watch?v=IIVDB0DCWNk&feature=youtu.be
コードはJRubyのですが、完全に理解するのは簡単でなければなりません。
def setup_3d_models
@modelBatch = ModelBatch.new
jsonReader = UBJsonReader.new
modelLoader = G3dModelLoader.new(jsonReader)
model = modelLoader.loadModel(fh('models3d/space_cruiser_4.g3db'))
$cruiser = ModelInstance.new(model)
end
私は今の私のinputprocessorでモデルの回転を処理しています:
class InputMuxer < InputAdapter
INCREMENT = 15
def keyDown(keycode)
puts "keyDown: #{keycode}"
if $desktop
case keycode
when Input::Keys::J
$cruiser.transform.rotate(1, 0, 0, -INCREMENT);
when Input::Keys::K
puts 'pressed K'
$cruiser.transform.rotate(1, 0, 0, INCREMENT);
when Input::Keys::U
puts 'pressed U'
$cruiser.transform.rotate(1, 0, -INCREMENT, 0);
when Input::Keys::I
puts 'pressed I'
$cruiser.transform.rotate(1, 0, INCREMENT, 0);
when Input::Keys::N
puts 'pressed N'
$cruiser.transform.rotate(1, INCREMENT, 0, 0);
when Input::Keys::M
puts 'pressed M'
$cruiser.transform.rotate(1, -INCREMENT, 0, 0);
end
end
私はまた、3軸の視覚的なガイドを印刷するためのいくつかのコードを持ってここに私のモデルのインスタンスです。ここに最終結果があります:
しかし、私は1つの軸で回転します。私はすぐに現在の動作でビデオをアップロードします。
model.transform.rotate呼び出しがうまくいかない理由は何ですか?私は行列4の幾何学を誤解していると思う。
編集:よく私は間違ってmatrix4を間違って処理しています。どんなキーを押しても、16のセルのうち2つだけが変更されています。それは馬鹿だ。
def keyDown(keycode)
puts "keyDown: #{keycode}"
if $desktop
print $cruiser.transform
keyDown: 41
[1.0|0.0|0.0|0.0]
[0.0|5.6177378E-6|0.9999998|0.0]
[0.0|-0.9999998|5.6177378E-6|0.0]
[0.0|0.0|0.0|1.0]
pressed M
keyDown: 39
[1.0|0.0|0.0|0.0]
[0.0|5.6177378E-6|0.9999998|0.0]
[0.0|-0.9999998|5.6177378E-6|0.0]
[0.0|0.0|0.0|1.0]
pressed K
keyDown: 39
[1.0|0.0|0.0|0.0]
[0.0|0.25882444|0.9659242|0.0]
[0.0|-0.9659242|0.25882444|0.0]
[0.0|0.0|0.0|1.0]