3D 모델과 libgdx에 대해 배우고 있습니다. 키 누르기에 따라 3 축으로 모델을 회전하려고합니다. 내 문제는 하나의 축에서 회전 할 수 있지만 다른 두 축에서는 회전 할 수 없다는 것입니다. 문제가있는 행동의libgdx 문제가 3 축 중 2 축에서 3D 모델 회전.
비디오는 여기에 있습니다 : https://www.youtube.com/watch?v=IIVDB0DCWNk&feature=youtu.be
코드 JRuby를하지만, grok 수 쉬워야한다.
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 기하학을 오해하고 있다고 생각합니다.
편집 : 글쎄 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]