- TriangleNormal(vertex3f + e[0] * 3, vertex3f + e[1] * 3, vertex3f + e[2] * 3, normal);
- VectorNormalize(normal);
- v = normal3f + e[0] * 3;
- v[0] += normal[0];
- v[1] += normal[1];
- v[2] += normal[2];
- v = normal3f + e[1] * 3;
- v[0] += normal[0];
- v[1] += normal[1];
- v[2] += normal[2];
- v = normal3f + e[2] * 3;
- v[0] += normal[0];
- v[1] += normal[1];
- v[2] += normal[2];
+ float areaNormal[3];
+
+ TriangleNormal(
+ vertex3f + element[0] * 3,
+ vertex3f + element[1] * 3,
+ vertex3f + element[2] * 3,
+ areaNormal
+ );
+
+ vectorNormal = normal3f + element[0] * 3;
+ vectorNormal[0] += areaNormal[0];
+ vectorNormal[1] += areaNormal[1];
+ vectorNormal[2] += areaNormal[2];
+
+ vectorNormal = normal3f + element[1] * 3;
+ vectorNormal[0] += areaNormal[0];
+ vectorNormal[1] += areaNormal[1];
+ vectorNormal[2] += areaNormal[2];
+
+ vectorNormal = normal3f + element[2] * 3;
+ vectorNormal[0] += areaNormal[0];
+ vectorNormal[1] += areaNormal[1];
+ vectorNormal[2] += areaNormal[2];
+
+ element += 3;
+ }
+ // and just normalize the accumulated vertex normal in the end
+ vectorNormal = normal3f + 3 * firstvertex;
+ for (i = 0; i < numvertices; i++) {
+ VectorNormalize(vectorNormal);
+ vectorNormal += 3;