[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14023] trunk/blender/source/blender: optimized uv stretch display angle calculation

Campbell Barton ideasman42 at gmail.com
Sun Mar 9 15:49:12 CET 2008


Revision: 14023
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14023
Author:   campbellbarton
Date:     2008-03-09 15:49:12 +0100 (Sun, 09 Mar 2008)

Log Message:
-----------
optimized uv stretch display angle calculation

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_utildefines.h
    trunk/blender/source/blender/src/drawimage.c

Modified: trunk/blender/source/blender/blenkernel/BKE_utildefines.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_utildefines.h	2008-03-09 07:35:12 UTC (rev 14022)
+++ trunk/blender/source/blender/blenkernel/BKE_utildefines.h	2008-03-09 14:49:12 UTC (rev 14023)
@@ -111,6 +111,7 @@
 
 #define VECADD(v1,v2,v3) 	{*(v1)= *(v2) + *(v3); *(v1+1)= *(v2+1) + *(v3+1); *(v1+2)= *(v2+2) + *(v3+2);}
 #define VECSUB(v1,v2,v3) 	{*(v1)= *(v2) - *(v3); *(v1+1)= *(v2+1) - *(v3+1); *(v1+2)= *(v2+2) - *(v3+2);}
+#define VECSUB2D(v1,v2,v3) 	{*(v1)= *(v2) - *(v3); *(v1+1)= *(v2+1) - *(v3+1);}
 #define VECADDFAC(v1,v2,v3,fac) {*(v1)= *(v2) + *(v3)*(fac); *(v1+1)= *(v2+1) + *(v3+1)*(fac); *(v1+2)= *(v2+2) + *(v3+2)*(fac);}
 #define QUATADDFAC(v1,v2,v3,fac) {*(v1)= *(v2) + *(v3)*(fac); *(v1+1)= *(v2+1) + *(v3+1)*(fac); *(v1+2)= *(v2+2) + *(v3+2)*(fac); *(v1+3)= *(v2+3) + *(v3+3)*(fac);}
 

Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================
--- trunk/blender/source/blender/src/drawimage.c	2008-03-09 07:35:12 UTC (rev 14022)
+++ trunk/blender/source/blender/src/drawimage.c	2008-03-09 14:49:12 UTC (rev 14023)
@@ -510,6 +510,7 @@
 		return AreaF2Dfl(tf->uv[0], tf->uv[1], tf->uv[2]); 
 	}
 }
+
 /* draws uv's in the image space */
 void draw_uvs_sima(void)
 {
@@ -647,6 +648,8 @@
 				float ang1,ang2,ang3,ang4;
 				float col[3];
 				
+				float av1[3], av2[3], av3[3], av4[3]; /* use for 2d and 3d  angle vectors */  
+				
 				glShadeModel(GL_SMOOTH);
 				
 				for (efa= em->faces.first; efa; efa= efa->next) {
@@ -655,6 +658,8 @@
 					if (simaFaceDraw_Check(efa, tface)) {
 						efa->tmp.p = tface;
 						if (efa->v4) {
+							
+#if 0						/* Simple but slow, better reuse normalized vectors */
 							uvang1 = VecAngle3_2D(tface->uv[3], tface->uv[0], tface->uv[1]);
 							ang1 = VecAngle3(efa->v4->co, efa->v1->co, efa->v2->co);
 							
@@ -666,7 +671,28 @@
 							
 							uvang4 = VecAngle3_2D(tface->uv[2], tface->uv[3], tface->uv[0]);
 							ang4 = VecAngle3(efa->v3->co, efa->v4->co, efa->v1->co);
+#endif
 							
+							/* uv angles */
+							VECSUB2D(av1, tface->uv[3], tface->uv[0]); Normalize2(av1);
+							VECSUB2D(av2, tface->uv[0], tface->uv[1]); Normalize2(av2);
+							VECSUB2D(av3, tface->uv[1], tface->uv[2]); Normalize2(av3);
+							VECSUB2D(av4, tface->uv[2], tface->uv[3]); Normalize2(av4);
+							uvang1 = 90-((NormalizedVecAngle2_2D(av1, av2) * 180.0/M_PI)-90);
+							uvang2 = 90-((NormalizedVecAngle2_2D(av2, av3) * 180.0/M_PI)-90);
+							uvang3 = 90-((NormalizedVecAngle2_2D(av3, av4) * 180.0/M_PI)-90);
+							uvang4 = 90-((NormalizedVecAngle2_2D(av4, av1) * 180.0/M_PI)-90);
+							
+							/* 3d angles */
+							VECSUB(av1, efa->v4->co, efa->v1->co); Normalize(av1);
+							VECSUB(av2, efa->v1->co, efa->v2->co); Normalize(av2);
+							VECSUB(av3, efa->v2->co, efa->v3->co); Normalize(av3);
+							VECSUB(av4, efa->v3->co, efa->v4->co); Normalize(av4);
+							ang1 = 90-((NormalizedVecAngle2(av1, av2) * 180.0/M_PI)-90);
+							ang2 = 90-((NormalizedVecAngle2(av2, av3) * 180.0/M_PI)-90);
+							ang3 = 90-((NormalizedVecAngle2(av3, av4) * 180.0/M_PI)-90);
+							ang4 = 90-((NormalizedVecAngle2(av4, av1) * 180.0/M_PI)-90);
+							
 							glBegin(GL_QUADS);
 							
 							weight_to_rgb(fabs(uvang1-ang1)/180.0, col, col+1, col+2);
@@ -681,9 +707,10 @@
 							weight_to_rgb(fabs(uvang4-ang4)/180.0, col, col+1, col+2);
 							glColor3fv(col);
 							glVertex2fv(tface->uv[3]);
+							printf("%f %f %f %f | %f %f %f %f\n", uvang1,uvang2,uvang3,uvang4,  ang1,ang2,ang3,ang4);
 							
-							
 						} else {
+#if 0						/* Simple but slow, better reuse normalized vectors */
 							uvang1 = VecAngle3_2D(tface->uv[2], tface->uv[0], tface->uv[1]);
 							ang1 = VecAngle3(efa->v3->co, efa->v1->co, efa->v2->co);
 							
@@ -692,7 +719,25 @@
 							
 							uvang3 = 180-(uvang1+uvang2);
 							ang3 = 180-(ang1+ang2);
+#endif						
 							
+							/* uv angles */
+							VECSUB2D(av1, tface->uv[2], tface->uv[0]); Normalize2(av1);
+							VECSUB2D(av2, tface->uv[0], tface->uv[1]); Normalize2(av2);
+							VECSUB2D(av3, tface->uv[1], tface->uv[2]); Normalize2(av3);
+							uvang1 = 90-((NormalizedVecAngle2_2D(av1, av2) * 180.0/M_PI)-90);
+							uvang2 = 90-((NormalizedVecAngle2_2D(av2, av3) * 180.0/M_PI)-90);
+							uvang3 = 90-((NormalizedVecAngle2_2D(av3, av1) * 180.0/M_PI)-90);
+							
+							/* 3d angles */
+							VECSUB(av1, efa->v3->co, efa->v1->co); Normalize(av1);
+							VECSUB(av2, efa->v1->co, efa->v2->co); Normalize(av2);
+							VECSUB(av3, efa->v2->co, efa->v3->co); Normalize(av3);
+							ang1 = 90-((NormalizedVecAngle2(av1, av2) * 180.0/M_PI)-90);
+							ang2 = 90-((NormalizedVecAngle2(av2, av3) * 180.0/M_PI)-90);
+							ang3 = 90-((NormalizedVecAngle2(av3, av1) * 180.0/M_PI)-90);
+							
+							
 							glBegin(GL_TRIANGLES);
 							weight_to_rgb(fabs(uvang1-ang1)/180.0, col, col+1, col+2);
 							glColor3fv(col);





More information about the Bf-blender-cvs mailing list