我正在学习3D模型和libgdx。我试图在3个坐标轴上旋转我的模型,具体取决于按键。我的问题是,我可以在一个轴上旋转,但不能在另一个轴上旋转。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
我也有一些代码以沿三个轴的视觉指南。这里是最终结果:
但是,我只能通过一个轴旋转。我会尽快上传一个视频,以当前的行为。
为什么model.transform.rotate调用会被搞乱?我想我误解了matrix4几何。
编辑:好吧,我绝对处理矩阵4不正确。无论我点击什么键,16个单元格中只有两个正在修改。这似乎baaaaad。
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]