DX10 Terrain Normals - PullRequest
       64

DX10 Terrain Normals

0 голосов
/ 11 февраля 2011

Я создаю ландшафт, используя перлин-шум, а затем вычисляю нормали, используя:

    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

1 Ответ

0 голосов
/ 11 февраля 2011

Я не знаю много о DX10, но недавно я сделал это в OpenGL, похоже, вы делаете свои нормали для каждого треугольника, что даст вам плоскую штриховку, так что то, что вы видите, вероятно, правильно.

Если вы хотите вычислить свои нормали для каждой вершины, используйте что-то вроде:

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

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

...