public void CalculateFakeNormals()
{
float d1, d2; // diagonal slopes across 2 grid squares
float ycomp = 6f * size / cmplx; // Fixed y-component of each vertex normal
for ( int i = 1; i < cmplx; i++ )
{
for ( int j = 1; j < cmplx; j++ )
{
// Take average slopes across two grids
d1 = vBuf[ i - 1, j - 1 ].y - vBuf[ i + 1, j + 1 ].y;
d2 = vBuf[ i + 1, j - 1 ].y - vBuf[ i - 1, j + 1 ].y;
vNorms[ i, j ].x = vBuf[ i, j - 1 ].y - vBuf[ i, j + 1 ].y + d1 + d2; // x-only component
vNorms[ i, j ].z = vBuf[ i - 1, j ].y - vBuf[ i + 1, j ].y + d1 - d2; // z-only component
vNorms[ i, j ].y = ycomp;
vNorms[ i, j ].Normalize();
}
}
// Create Unit-Y Normals for Water Edges (no angle for edges)
for ( int i = 0; i <= cmplx; i++ )
{
vNorms[ i, 0 ] = vNorms[ i, cmplx ] = vNorms[ 0, i ] = vNorms[ cmplx, i ] = Vector3.UnitY;
}
// Write Normals to Hardware Buffer
normVBuf.WriteData( 0, normVBuf.Size, vNorms, true );
}