2014-11-01 41 views
0

我嘗試從MD5ANIM和MD5Mesh文件(Doom中的3D動畫和模型格式)加載動畫到我的DX 11延遲渲染器。
除了必須使用XNA Math更新模型頂點位置和動畫法線之外,一切正常。 以下代碼計算旋轉法線的結果總是-1。#QNAN00和模型顯示爲全黑。 除此之外,位置的計算工作正常,您可以看到正常運行的動畫完全沒有法線。MD5在DirectX X中的3D模型和動畫11.正常旋轉以更新模型結果爲1.#QNAN00

// Add to vertices normal and ake weight bias into account 
    tempVert.normal.x -= rotatedPoint.x * tempWeight.bias; 
    tempVert.normal.y -= rotatedPoint.y * tempWeight.bias; 
    tempVert.normal.z -= rotatedPoint.z * tempWeight.bias; 
    //End 

在計算beginng的值是:

浮子tempWeight.bias = 1.0000000

XMFLOAT3 rotatedPoint X = -0.022973990 Y = -0.053293169 Z = -0.10924719

XMFLOAT3 tempVert .normal = x = 0.00000000 y = 0.00000000 z = 0.00000000

我不得不提到我計算for循環中的值。 循環後,我存儲的值是這樣的:

MD5Model.subsets[k].positions[i] = tempVert.pos;  // Store the vertices position in the position vector instead of straight into the vertex vector 
MD5Model.subsets[k].vertices[i].normal = tempVert.normal;  // Store the vertices normal 
XMStoreFloat3(&MD5Model.subsets[k].vertices[i].normal,XMVector3Normalize(XMLoadFloat3(&MD5Model.subsets[k].vertices[i].normal))); 

乾杯最大

回答

0

XMVector3Normalize會返回一個浮點特殊的,如果你給它一個正常的0,0,0。

要計算法線,可以將每個元素(a 0)除以其長度(a 0)。結果是以零失敗除。