2011-02-11 5 views
0

Я генерирующие местности с использованием шума Перлина, а затем вычислительные нормали с помощью:DX10 Terrain Normals

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, это выглядит, как вы делаете ваши нормалей для каждого треугольника основе, которая даст вам затенение, так то, что вы видите, вероятно, правильно.

Если вы хотите, чтобы рассчитать нормали за использованием вершинного что-то вроде:

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

где X - вершина в направлении X на сетке и Y в направлении Y.