libGDX设置3D旋转点

5

我有两个对象base和weapon,我需要将weapon的旋转点设置为base的位置。

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));
}

一只忙碌的猫

感谢您的回答。


你想要将 Weapon 绕着 Base 的中心点旋转吗?所以你想要实现第二张图片中的效果,而不是第一张图片中的效果,对吗? - Robert P
是的,将第二个对象的旋转点更改为第一个对象的点。围绕第一个对象旋转第二个对象。 - Jakub Kučera
1
@Xoppa在这个问题(http://stackoverflow.com/questions/21939393/rotate-modelinstance-at-specific-point)下的评论应该是你问题的解决方案。 - Robert P
1
解决方案:weapon.transform.translate(3, 0, 0).rotate(0,1,0, 45*delta).translate(-3, 0, 0); - Jakub Kučera
@JakubKučera 为什么不把这个作为你自己的答案发布呢?这可能会帮助其他人。在SO上回答自己的问题是被鼓励的。 - cfrick
1个回答

7
一个点的旋转等同于先将其平移至该点,进行旋转后再将其平移回来。
因此该过程包括三个步骤:
  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); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接