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

GLES/Java Collada(.dae) skeleton importing

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

根(好)-> 子(有时 Good/Sometimes 坏)-> ...-> 最终子(好)

正如您在图片中看到的那样,一些连接点在正确的位置,但似乎连接不正确,其他连接点完全错误,最后的连接点如头部、取景器尖端、脚是正确的。我认为我走在正确的道路上,但不确定到哪里去找出导致问题的原因。

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

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

这似乎工作正常我只是想我提一下以防出现问题。

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