GLES / Java Collada(.dae)骨架导入

时间:2017-03-19 04:06:52

标签: java opengl-es collada

我正在尝试从collada .dae文件格式中提取骨架。我能够正确获取最终子节点位置以及根节点,但其余节点看起来不正确。

Root(Good) - >孩子(有时好/有时坏) - > ... - >最后的孩子(好)

enter image description here enter image description here

正如你可以从图像中看到的那样,一些连接位于正确的位置,但似乎没有正确连接,其他关节只是平坦错误,最后的关节,如头部,取景器尖端,脚是正确。我认为我走的是正确的道路,但我不确定在哪里找出导致问题的原因。

这是我用来获取联合全局矩阵的代码。

public final float[] getGlobalMatrix() {
        if (mParent != null) {
            Matrix.multiplyMM(mMatrix, 0, mParent.getMatrix(), 0, mLocalBoneTransformMatrix, 0);
        } else {
            final float[] tmp = new float[16];
            Matrix.setIdentityM(tmp, 0);
            Matrix.multiplyMM(mMatrix, 0, tmp, 0, mLocalBoneTransformMatrix, 0);
        }
        return mMatrix;
    }

我在GLEs2.0中渲染这个,所以我正在使用以下方法从collada文件转换我读入的矩阵。

private static float[] convertToGLESMatrix(final float[] colladaMatrix) {
        final float[] result = new float[16];
        result[ 0] = colladaMatrix[ 0];
        result[ 1] = colladaMatrix[ 4];
        result[ 2] = colladaMatrix[ 8];
        result[ 3] = colladaMatrix[12];

        result[ 4] = colladaMatrix[ 1];
        result[ 5] = colladaMatrix[ 5];
        result[ 6] = colladaMatrix[ 9];
        result[ 7] = colladaMatrix[13];

        result[ 8] = colladaMatrix[ 2];
        result[ 9] = colladaMatrix[ 6];
        result[10] = colladaMatrix[10];
        result[11] = colladaMatrix[14];

        result[12] = colladaMatrix[ 3];
        result[13] = colladaMatrix[ 7];
        result[14] = colladaMatrix[11];
        result[15] = colladaMatrix[15];
        return result;
    }

这似乎工作得很好,我只是想,如果这是一个问题,请提及它。

1 个答案:

答案 0 :(得分:0)

原来我的绘制函数是在递归循环中通过引用传递一些数据并更新它导致问题。