Android 三维父子关系libgdx

Android 三维父子关系libgdx,android,3d,libgdx,Android,3d,Libgdx,我在3d(.g3dj文件)中有两条手臂彼此相连,就像父子关系一样。我的要求是,当父手臂旋转/移动时,子手臂也应旋转/移动,同时在一个点连接到父手臂。我能够做到这一点 在给定点连接到其父手臂时,子手臂也可以独立旋转,在这种情况下,父手臂本身不应移动。我被困在下面的情况中: 当父对象移动/旋转时,子对象也移动/旋转。在 如果子对象旋转360度,则父对象移动/旋转的特定角度 度,则看不到变形 如果子对象旋转/移动,则其角度和方向将更改。在这种情况下,当进一步旋转/移动父对象时,子对象的位置会从父对象扭

我在3d(
.g3dj文件
)中有两条手臂彼此相连,就像父子关系一样。我的要求是,当父手臂旋转/移动时,子手臂也应旋转/移动,同时在一个点连接到父手臂。我能够做到这一点

在给定点连接到其父手臂时,子手臂也可以独立旋转,在这种情况下,父手臂本身不应移动。我被困在下面的情况中:

  • 当父对象移动/旋转时,子对象也移动/旋转。在
    如果子对象旋转360度,则父对象移动/旋转的特定角度 度,则看不到变形
  • 如果子对象旋转/移动,则其角度和方向将更改。在这种情况下,当进一步旋转/移动父对象时,子对象的位置会从父对象扭曲
  • 我认为需要一个骨骼层次结构。请建议方法/链接,以便在所有情况下,无论其移动/旋转如何,父子位置(在接触点)都不会扭曲。谢谢

    以下是我迄今为止尝试过的代码:

    private void createBaseArm1(){
        // Now load the model by name from asset folder
        baseArm1 = modelLoader.loadModel(Gdx.files.getFileHandle(armPathWithName + ".g3dj", Files.FileType.Internal));
    
        //getting boundingBox for model to retrieve its co-ordinates
        baseArm1.calculateBoundingBox(baseBoundingBox);
    
        baseArm1PositionX = 0f;
        baseArm1PositionY = -3.0f;
        baseArm1PositionZ = 1.0f;
    
        baseArm1PositionVector = new Vector3(baseArm1PositionX, baseArm1PositionY, baseArm1PositionZ);
    
        baseArm1Instance = new ModelInstance(baseArm1, baseArm1PositionVector);
        baseArm1Instance.transform.set(baseArm1PositionVector, baseArm1Rotation);
    
        baseArm1TopPositionY = baseArm1PositionY + baseBoundingBox.getHeight();
    
    }
    
    private void createArm2(){
        arm2Vector = new Vector3(baseArm1PositionX,baseArm1TopPositionY ,baseArm1PositionZ);
        armModel2 = modelLoader.loadModel(Gdx.files.getFileHandle("arm2.g3dj", Files.FileType.Internal));
        arm2Instance = new ModelInstance(armModel2, arm2Vector);
        arm2Instance.transform.set(arm2Vector, arm2Rotation);
    }
    
    public void moveBaseArm1() {
    
        baseArm1Instance.transform.translate(0, 0, 0).rotate(0, 0, 1, 10).translate(0, 0, 0);
        arm2Instance.transform
                .translate(-0, -baseBoundingBox.getHeight(), -baseBoundingBox.getDepth())
                .rotate(0, 0, 1, 10)
                .translate(0, baseBoundingBox.getHeight(), baseBoundingBox.getDepth());
    
    
    }
    
    public void moveArm2() {
        arm2Instance.transform.translate(0,0,0).rotate(0, 0, 1, 10).translate(0, 0, 0);
    }
    

    这是两个
    .g3dj文件
    ->

    为什么要使用两个独立的模型而不是一个?您使用哪个建模应用程序创建模型?每个模型中的节点结构如何?也许考虑考虑G3DJ文件的内容。@ Xoppa,我几乎不知道如何使用一个模型而不是两个模型。我已经阅读了libgdx教程中的一个模型,但无法正确理解它。根据我的分析,我使用了两个模型。我还使用
    blender.exe
    导出
    .g3dj
    文件。请指定什么是
    节点结构
    。我已经给出了g3dj文件的url。节点结构允许您在模型中创建父子关系。您可以在单个模型中拥有任意多个节点,并且每个节点都可以独立变换,从而也可以变换其所有子节点。另见:。另外,请务必阅读我的3D教程:,它们还介绍了节点以及它们在libgdx中的工作方式。我不知道blender,但它是一个基本的建模概念,所以在blender中使用它应该不难。谢谢。我会调查的,Xoppa是个传奇。你应该知道。