diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-03-09 17:49:12 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-03-09 17:49:12 +0300 |
commit | c6f423c1d27b5d5ebbb597e9bf7e40a6b3c0170c (patch) | |
tree | 153f86cd1d56c3b12b4ae9d8d2703c1d8d74879a /source | |
parent | d9da14d8a72aa99ea09d979de154798d30e653cb (diff) |
optimized uv stretch display angle calculation
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_utildefines.h | 1 | ||||
-rw-r--r-- | source/blender/src/drawimage.c | 47 |
2 files changed, 47 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index fa0f2f7b34b..d53ee212ee5 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -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);} diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c index c68f81a8675..614d31541fd 100644 --- a/source/blender/src/drawimage.c +++ b/source/blender/src/drawimage.c @@ -510,6 +510,7 @@ float tface_area(MTFace *tf, int quad) 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 @@ void draw_uvs_sima(void) 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 @@ void draw_uvs_sima(void) 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,6 +671,27 @@ void draw_uvs_sima(void) 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); @@ -681,9 +707,10 @@ void draw_uvs_sima(void) 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,6 +719,24 @@ void draw_uvs_sima(void) 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); |