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

Posted

技术标签:

【中文标题】GLES/Java Collada(.dae) 骨架导入【英文标题】:GLES/Java Collada(.dae) skeleton importing 【发布时间】:2017-08-10 12:06:35 【问题描述】:

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

Root(Good) -> Child(有时好/有时坏) -> ... -> Final Child(Good)

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

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

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】:

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

【讨论】:

以上是关于GLES/Java Collada(.dae) 骨架导入的主要内容,如果未能解决你的问题,请参考以下文章

在 SceneKit 中支持 Collada/DAE 模型都有哪些要求?

Blender 如何解释 Collada 文件 (.dae) 以进行装配?

如何使用 openGL 在 android studio 中渲染 .dae(collada) 文件

如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?

使用 SceneKit 从 DAE/COLLADA 中提取动画顶点

导入到 XCode 的 Collada (.dae) 文件显示没有纹理