libGDX установить точку вращения 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));
}

деловой кот

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


person Jakub Kučera    schedule 30.10.2014    source источник
comment
Вы хотите повернуть Weapon вокруг центральной точки Bases? Итак, вы хотите получить то, что показано на второй картинке, а не то, что на первой картинке, верно?   -  person Springrbua    schedule 30.10.2014
comment
Да, изменить точку вращения 2. объекта на 1. точку объекта. Поверните 2. объект вокруг первого.   -  person Jakub Kučera    schedule 30.10.2014
comment
Комментарий @Xoppa под этим (stackoverflow.com/questions/ 21939393/) вопрос должен быть решением вашей проблемы.   -  person Springrbua    schedule 30.10.2014
comment
Да, большое спасибо. Вот и все. :) Решение: weapon.transform.translate(3, 0, 0).rotate(0,1,0, 45*delta).translate(-3, 0, 0);   -  person Jakub Kučera    schedule 30.10.2014
comment
@JakubKučera, почему бы вам не опубликовать это как свой (собственный) ответ? это может помочь другим. Ответ на ваш собственный вопрос рекомендуется на SO.   -  person cfrick    schedule 31.10.2014


Ответы (1)


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

  1. Перевести на rotationPoint, например translate(3, 0, 0)
  2. Поверните вокруг центра (который теперь 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); 
person Jakub Kučera    schedule 31.10.2014