我有点失去了,失去了与蒙皮网格
我终于有时间上的蒙皮网格与MD5对GPU的工作 - 通过矩阵,我desparately不能得到正确的结果(它是如此该死的错)!
因此,这里是我做的:
装入MD5MESH文件
构建收口姿势网(这一步是正确完成 - 几何是正确的)
像这样创建bindpose和反向绑定(注意关节用作加载,未由父级转换,它们是否需要?):
for(unsigned int i = 0; i < this->mMatricesCount; i++) { mat4 mBoneTranslation = mat4( 1, 0, 0, mModel->mJoints[i].mPosition.x, 0, 1, 0, mModel->mJoints[i].mPosition.y, 0, 0, 1, mModel->mJoints[i].mPosition.z, 0, 0, 0, 1); mat4 mBoneRotation = mat4(mModel->mJoints[i].mOrientation); mat4 mBoneMatrix = mBoneTranslation * mBoneRotation; this->mMatrices[i] = mBoneMatrix; this->mInverseMatrices[i] = inverse(mBoneMatrix); }
负载MD5ANIM文件(其中,每帧关节被计算为):
if(mAnimation->mJoints[i].mParent < 0) { mAnimation->mFrames[mFrameID][i].mPosition = _position; mAnimation->mFrames[mFrameID][i].mOrientation = _orientation; } else { MD5FrameJoint *mParent = &mAnimation->mFrames[mFrameID][mAnimation->mJoints[i].mParent]; float4 rpos = rotate(mParent->mOrientation, _position); mAnimation->mFrames[mFrameID][i].mPosition = rpos + mParent->mPosition; mAnimation->mFrames[mFrameID][i].mOrientation = mParent->mOrientation * _orientation; }
每个帧,构建骨基质如(即最大的4个权重现在不能引起麻烦,因为目前我在简单的镶嵌的四现场只需3骨头 - 错误地旋转):
for(unsigned int i = 0; i < this->mJoints; i++) { const mat4 mTranslate = mat4( 1, 0, 0, this->mFramePositions[mFrame][i].x, 0, 1, 0, this->mFramePositions[mFrame][i].y, 0, 0, 1, this->mFramePositions[mFrame][i].z, 0, 0, 0, 1); const mat4 mRotate = mat4(this->mFrameOrientations[mFrame][i]); this->mOutput[i] = mTranslate * mRotate; }
并计算一样(现在这样对CPU的顶点,想将其移动到GPU):
for(unsigned int j = 0; j < mSkinnedModel->mVertexCount[i]; j++) { float4 mResult = float4(0, 0, 0, 0); float4 mPosition = float4(mSkinnedModel->mVertices[i][j].mPosition[0], mSkinnedModel->mVertices[i][j].mPosition[1], mSkinnedModel->mVertices[i][j].mPosition[2], 1.0f); for(unsigned int k = 0; k < 4; k++) { mResult += (mAnimatedBones[mSkinnedModel->mVertices[i][j].mBoneIndices[k]] * mPosition) * mSkinnedModel->mVertices[i][j].mBoneWeights[k]; } mBuffer[j].mPosition[0] = mResult.x; mBuffer[j].mPosition[1] = mResult.y; mBuffer[j].mPosition[2] = mResult.z; mBuffer[j].mPosition[3] = 1.0f; }
网+动画文件是否正确(其中出口和进口,以3D建模软件,工程!)
现在我测试我的数学函数库是否是好的,到目前为止,它似乎不错(矩阵求逆,四元数乘法,四元数矩阵测试,...)
请不要指向我的任何文章,我已经有一些(含。那些MD5皮肤与矩阵+源代码的GPU)打开并找出什么是错的,到目前为止代码似乎几乎完全一样。这将是一些微小的蹩脚细节。
任何人都可以看到古茹在哪里?
MD5是最常见的哈希算法。我删除了该标签。 – rekire