2014-10-30 3 views
2

У меня есть две базы объектов и оружие, и мне нужно установить точку поворота оружия в положение базы.libGDX set точка поворота 3D

public Test(){ 
position1 = new Vector3(0,0,0); 
baseModel = modelLoader.loadModel(Gdx.files.getFileHandle("data/models/tower/bases/base1.g3db", FileType.Internal)); 
     base = new Base(baseModel, position1); 

     position2 = new Vector3(3,10,5); 

     weaponModel = modelLoader.loadModel(Gdx.files.getFileHandle("data/models/tower/weapons/weapon2.g3db", FileType.Internal)); 
     weapon = new Weapon(weaponModel, position2); 
} 

Вот метод обновления

public void update(float delta){ 

     weapon.transform.rotate(0, 1, 0, 45*(delta/2)); 
     base.transform.rotate(0, 1, 0, 45*(delta/2)); 
} 

a busy cat

Спасибо за ответ

+0

Вы хотите повернуть «Оружие» вокруг центральной точки базы? Итак, вы хотите добиться того, что показано на втором рисунке, а не в первой картине? – Springrbua

+0

Да, смените точку поворота на 2. объект на 1. точку объекта. Поверните 2. объект вокруг первого. –

+1

Комментарий @Xoppa в этом вопросе (http://stackoverflow.com/questions/21939393/rotate-modelinstance-at-specific-point) должен быть решением вашей проблемы. – Springrbua

ответ

5

Вращение вокруг точки так же, как перевод на тот момент, поворот, а затем перевод обратно ,
Так что этот процесс состоит из 3 этапов:

  1. Перевести на rotationPoint, например translate(3, 0, 0)
  2. Поворот Arround центра (который в настоящее время rotationPoint), например rotate(0,1,0, 45*delta)
  3. Перевести назад (в переводе является относительно вращения), например translate(-3, 0, 0);

в этом случае код будет выглядеть следующим образом:

weapon.transform.translate(3, 0, 0).rotate(0,1,0, 45*delta).translate(-3, 0, 0);