我爲我們的小遊戲引擎寫了一個fbx轉換器。我堅持使用動畫來渲染模型。每個時間戳的矩陣看起來都不錯,當我渲染骨頭時,它也看起來像原始動畫。我做了一些快照以顯示我的問題。我無法弄清楚什麼是錯的。也許有人能給我一個提示:)骷髏動畫與FBX
我用來測試的文件是FBX-SDK中的humanoid.fbx。
着色器應該確定:
VS_OUT output = (VS_OUT)0;
float4x4 skinTransform = 0;
skinTransform += MatrixPallette[input.BoneIndices.x] * input.Weights.x;
skinTransform += MatrixPallette[input.BoneIndices.y] * input.Weights.y;
skinTransform += MatrixPallette[input.BoneIndices.z] * input.Weights.z;
skinTransform += MatrixPallette[input.BoneIndices.w] * input.Weights.w;
//skinTransform = mul(BindShape, skinTransform);
//Transform Position
float4 worldPosition = mul(input.Position, skinTransform);
float4 viewPosition = mul(worldPosition, matView);
output.Position = mul(viewPosition, matProj);
這裏是照片。 (right - > orginal) http://www.pic-upload.de/view-13949399/Unbenannt.png.html
正如你已經提到的,我需要反向骨骼變換。但我也發現FBX中的頂點處於對象空間中,您必須將它們轉換爲全局空間。在這篇文章中提到:[鏈接] http://area.autodesk.com/forum/autodesk-fbx/fbx-sdk/am-i-missing-something/ – 2012-04-28 10:51:28
@MathiasHölzl:「對象」和「全球「空間是一個額外的矩陣乘法。在包含場景層次結構(* .x)的某些其他格式中,對象也存儲在「對象空間」中,並在文件內的其他地方爲其分配相應的變換。 – SigTerm 2012-04-28 13:14:34