我有點失去了,失去了與蒙皮網格
我終於有時間上的蒙皮網格與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