seamuslawless

02-27-2003, 06:44 AM

Hi,

I am creating a program to draw 3D terrain. I draw individual contours at different heights and use a list of GL_TRIANGLES to join the contours and make the 3D terrain. I am having difficulty calculating the normals for the triangle list however and am getting some very weird effects.

Currently the was I calculate the normals is to take two lines of the triangle

^ /\

| / \

| /____\

|__________>

and calc the normal as follows

Vector3 crossProduct(Vector3 v1, Vector3 v2, Vector3 v3)

{

Vector3 e1, e2;

e1 = Vector3(v2.x - v1.x,

v2.y - v1.y,

v2.z - v1.z);

e2 = Vector3(v3.x - v1.x,

v3.y - v1.y,

v3.z - v1.z);

return Vector3(e1.y * e2.z

- e1.z * e2.y,

-e1.x * e2.z

+ e1.z * e2.x,

e1.x * e2.y

- e1.y * e2.x);

}

I'm calculating one normal per triangle. Does this calculation look correct ?

Any help that you can give will be much appreciated !

I am creating a program to draw 3D terrain. I draw individual contours at different heights and use a list of GL_TRIANGLES to join the contours and make the 3D terrain. I am having difficulty calculating the normals for the triangle list however and am getting some very weird effects.

Currently the was I calculate the normals is to take two lines of the triangle

^ /\

| / \

| /____\

|__________>

and calc the normal as follows

Vector3 crossProduct(Vector3 v1, Vector3 v2, Vector3 v3)

{

Vector3 e1, e2;

e1 = Vector3(v2.x - v1.x,

v2.y - v1.y,

v2.z - v1.z);

e2 = Vector3(v3.x - v1.x,

v3.y - v1.y,

v3.z - v1.z);

return Vector3(e1.y * e2.z

- e1.z * e2.y,

-e1.x * e2.z

+ e1.z * e2.x,

e1.x * e2.y

- e1.y * e2.x);

}

I'm calculating one normal per triangle. Does this calculation look correct ?

Any help that you can give will be much appreciated !