Compute first partials before taking cross product to calculate normal.
authorKeith Whitwell <keith@tungstengraphics.com>
Tue, 14 Aug 2001 00:50:44 +0000 (00:50 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Tue, 14 Aug 2001 00:50:44 +0000 (00:50 +0000)
Fixes diego santa cruz' nurbs lighting bug.

src/mesa/tnl/t_imm_eval.c

index 1ae006666fd638787b6e6554b6080b44d4edf2e6..6a69e9b3d86dfa4fe262bf7a13d7186c5990de29 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_eval.c,v 1.14 2001/08/01 05:10:42 keithw Exp $ */
+/* $Id: t_imm_eval.c,v 1.15 2001/08/14 00:50:44 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -206,6 +206,14 @@ static void eval2_obj_norm( GLvector4f *obj_ptr,
         _math_de_casteljau_surf(map->Points, obj[i], du, dv, u, v, dimension,
                                 map->Uorder, map->Vorder);
 
+        du[0] = du[0]*obj[i][3] - du[3]*obj[i][0];
+        du[1] = du[1]*obj[i][3] - du[3]*obj[i][1];
+        du[2] = du[2]*obj[i][3] - du[3]*obj[i][2];
+        
+        dv[0] = dv[0]*obj[i][3] - dv[3]*obj[i][0];
+        dv[1] = dv[1]*obj[i][3] - dv[3]*obj[i][1];
+        dv[2] = dv[2]*obj[i][3] - dv[3]*obj[i][2];
+
         CROSS3(normal[i], du, dv);
         NORMALIZE_3FV(normal[i]);
       }