Calculate Normal for vertexes

jorn79

Newcomer
Joined
Apr 14, 2006
Messages
1
Hi,

I'm creating a 3D landscape using a heightmap. The landscape is working, but I'm trying to create normals for the vertexes. Could anyone verify that I'm doing this correctly? Or maybe point me in the right direction :)


Regards,

Jørn



Code:
for( int y = 0; y < _Height; y++ )
{
	for( int x = 0; x < _Width; x++ )
        {
        	try
                {
                	Vector3 p0 = _Vertexes[x + y * _Width].Position;
					Vector3 p1 = _Vertexes[-1 + x + y * _Width].Position - p0;
                	Vector3 p2 = _Vertexes[-_Width + x + y * _Width].Position - p0;
                	Vector3 p3 = _Vertexes[1 + ( -_Width ) + x + y * _Width].Position - p0;
                	Vector3 p4 = _Vertexes[1 + x + y * _Width].Position - p0;
                	Vector3 p5 = _Vertexes[_Width + x + y * _Width].Position - p0;
                	Vector3 p6 = _Vertexes[-1 + _Width + x + y * _Width].Position - p0;

                	Vector3 n1 = Vector3.Cross( p2, p1 );
                	Vector3 n2 = Vector3.Cross( p3, p2 );
                	Vector3 n3 = Vector3.Cross( p4, p3 );
                	Vector3 n4 = Vector3.Cross( p5, p4 );
                	Vector3 n5 = Vector3.Cross( p6, p5 );
                	Vector3 n6 = Vector3.Cross( p1, p6 );

                	n1.Normalize();
                	n2.Normalize();
                	n3.Normalize();
                	n4.Normalize();
                	n5.Normalize();
                	n6.Normalize();

                	Vector3 normal =
                	    ( n1 + n2 + n3 + n4 + n5 + n6 );
                	normal.X /= 6f;
                	normal.Y /= 6f;
                	normal.Z /= 6f;
                	_Vertexes[x + y * _Width].Normal = normal;
		}
		catch
		{
			// Don't care about vertexes at the borders at this point...
		}
	}
}
 
Back
Top