2011-02-11 34 views
0

我使用Perlin雜生成地形,然後使用計算法線:DX10地形法線

D3DXVECTOR3 v0 = aoVertices[auiIndices[i]].Position; 
    D3DXVECTOR3 v1 = aoVertices[auiIndices[i + 1]].Position; 
    D3DXVECTOR3 v2 = aoVertices[auiIndices[i + 2]].Position; 
    D3DXVECTOR3 v3 = aoVertices[auiIndices[i + 3]].Position; 
    D3DXVECTOR3 v4 = aoVertices[auiIndices[i + 4]].Position; 
    D3DXVECTOR3 v5 = aoVertices[auiIndices[i + 5]].Position; 

    D3DXVECTOR3 vNormal; 
    D3DXVECTOR3 vCross; 
    D3DXVec3Cross(&vCross, &D3DXVECTOR3(v2 - v0), &D3DXVECTOR3(v1 - v0)); 
    D3DXVec3Normalize(&vNormal, &vCross); 

    aoVertices[auiIndices[i]].Normal = D3DXVECTOR3(vNormal); 
    aoVertices[auiIndices[i + 1]].Normal = D3DXVECTOR3(vNormal); 
    aoVertices[auiIndices[i + 2]].Normal = D3DXVECTOR3(vNormal); 

    D3DXVec3Cross(&vCross, &D3DXVECTOR3(v5 - v3), &D3DXVECTOR3(v4 - v3)); 
    D3DXVec3Normalize(&vNormal, &vCross); 

    aoVertices[auiIndices[i + 3]].Normal = D3DXVECTOR3(vNormal); 
    aoVertices[auiIndices[i + 4]].Normal = D3DXVECTOR3(vNormal); 
    aoVertices[auiIndices[i + 5]].Normal = D3DXVECTOR3(vNormal); 

然而這是導致網格線方格之間出現。 任何想法是什麼問題?

例子: Example

回答

0

我不知道很多關於DX10,但我最近在OpenGL中這樣做,它看起來就像你在每個三角形的基礎,這將給你的平面遮蔽做你的法線,所以你看到的可能是正確的。

如果要計算每個頂點使用的東西,你的法線,如:

((X + 1) - (X-1))X((Y + 1) - (Y-1))

其中X是網格上X方向的頂點,Y方向是Y.