3d libgdx无法在3个轴中的2个轴上旋转三维模型

3d libgdx无法在3个轴中的2个轴上旋转三维模型,3d,libgdx,jruby,3d,Libgdx,Jruby,我正在学习3d模型和libgdx。我正试图根据按键在3个轴上旋转我的模型。我的问题是,我可以在一个轴上旋转,但不能在另外两个轴上旋转 问题行为的视频如下: 代码是jruby,但应该很容易找到。以下是我的模型实例化: def setup_3d_models @modelBatch = ModelBatch.new jsonReader = UBJsonReader.new modelLoader = G3dModelLoader.new(jsonReader) model = mo

我正在学习3d模型和libgdx。我正试图根据按键在3个轴上旋转我的模型。我的问题是,我可以在一个轴上旋转,但不能在另外两个轴上旋转

问题行为的视频如下:

代码是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
目前,我正在输入处理器中处理模型的旋转:

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


天哪,快修好了!!我确实把母题搞砸了。相反,我需要将带度的vec3传递给Matrix4。旋转:

  when Input::Keys::J
    $cruiser.transform.rotate(rotation_vec3(:x), -INCREMENT);
  when Input::Keys::K
    puts 'pressed K'
    $cruiser.transform.rotate(rotation_vec3(:x), INCREMENT);
  when Input::Keys::U
    puts 'pressed U'
    $cruiser.transform.rotate(rotation_vec3(:y), -INCREMENT);
  when Input::Keys::I
    puts 'pressed I'
    $cruiser.transform.rotate(rotation_vec3(:y), INCREMENT);
  when Input::Keys::N
    puts 'pressed N'
    $cruiser.transform.rotate(rotation_vec3(:z), INCREMENT);
  when Input::Keys::M
    puts 'pressed M'
    $cruiser.transform.rotate(rotation_vec3(:z), -INCREMENT);

相关libgdx代码:

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]
  when Input::Keys::J
    $cruiser.transform.rotate(rotation_vec3(:x), -INCREMENT);
  when Input::Keys::K
    puts 'pressed K'
    $cruiser.transform.rotate(rotation_vec3(:x), INCREMENT);
  when Input::Keys::U
    puts 'pressed U'
    $cruiser.transform.rotate(rotation_vec3(:y), -INCREMENT);
  when Input::Keys::I
    puts 'pressed I'
    $cruiser.transform.rotate(rotation_vec3(:y), INCREMENT);
  when Input::Keys::N
    puts 'pressed N'
    $cruiser.transform.rotate(rotation_vec3(:z), INCREMENT);
  when Input::Keys::M
    puts 'pressed M'
    $cruiser.transform.rotate(rotation_vec3(:z), -INCREMENT);
def rotation_vec3(axis)
    vs = { 
      :x => [1.0,0.0,0.0],
      :y => [0.0,1.0,0.0],
      :z => [0.0,0.0,1.0]
    } 
    Vector3.new(vs[axis].to_java(:float))
  end