optimized uv stretch display angle calculation
This commit is contained in:
@@ -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);}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user