diff options
author | Karl Berry <karl@freefriends.org> | 2017-03-23 22:37:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-03-23 22:37:58 +0000 |
commit | 511d523f9c0456937f392cab51c70f0dcf6ae1bc (patch) | |
tree | 2575821a91e042c74a61c3cb6387cc769e0a0b87 /Build/source/utils/asymptote/bezierpatch.cc | |
parent | 5db9b67730d1ad8391da2e18faa01062b64d1da0 (diff) |
asy 2.41 sources
git-svn-id: svn://tug.org/texlive/trunk@43590 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/bezierpatch.cc')
-rw-r--r-- | Build/source/utils/asymptote/bezierpatch.cc | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/Build/source/utils/asymptote/bezierpatch.cc b/Build/source/utils/asymptote/bezierpatch.cc index c75989c40df..f076d4643ac 100644 --- a/Build/source/utils/asymptote/bezierpatch.cc +++ b/Build/source/utils/asymptote/bezierpatch.cc @@ -31,6 +31,7 @@ GLuint BezierPatch::Ntvertices=0; extern const double Fuzz2; const double FillFactor=0.1; +const double BezierFactor=0.4; // Partially work around OpenGL transparency bug by sorting transparent // triangles by their centroid depth. @@ -58,7 +59,7 @@ void BezierPatch::init(double res, const triple& Min, const triple& Max, { empty=false; res2=res*res; - res3=res2; + Res2=BezierFactor*BezierFactor*res2; Epsilon=FillFactor*res; this->Min=Min; this->Max=Max; @@ -219,28 +220,28 @@ void BezierPatch::render(const triple *p, triple m0=0.5*(P0+P1); if(!flat0) { - if((flat0=Straightness(p0,p[4],p[8],p12) < res3)) + if((flat0=Straightness(p0,p[4],p[8],p12) < res2)) m0 -= Epsilon*unit(derivative(s1[0],s1[1],s1[2],s1[3])); else m0=s0[12]; } triple m1=0.5*(P1+P2); if(!flat1) { - if((flat1=Straightness(p12,p[13],p[14],p15) < res3)) + if((flat1=Straightness(p12,p[13],p[14],p15) < res2)) m1 -= Epsilon*unit(derivative(s2[12],s2[8],s2[4],s2[0])); else m1=s1[15]; } triple m2=0.5*(P2+P3); if(!flat2) { - if((flat2=Straightness(p15,p[11],p[7],p3) < res3)) + if((flat2=Straightness(p15,p[11],p[7],p3) < res2)) m2 -= Epsilon*unit(derivative(s3[15],s2[14],s2[13],s1[12])); else m2=s2[3]; } triple m3=0.5*(P3+P0); if(!flat3) { - if((flat3=Straightness(p0,p[1],p[2],p3) < res3)) + if((flat3=Straightness(p0,p[1],p[2],p3) < res2)) m3 -= Epsilon*unit(derivative(s0[3],s0[7],s0[11],s0[15])); else m3=s3[0]; } @@ -356,7 +357,7 @@ void BezierTriangle::render(const triple *p, bool flat0, bool flat1, bool flat2, GLfloat *C0, GLfloat *C1, GLfloat *C2) { - if(Distance(p) < res2) { // Triangle is flat + if(Distance(p) < Res2) { // Triangle is flat triple P[]={P0,P1,P2}; if(!offscreen(3,P)) { std::vector<GLuint> &p=*pindices; @@ -490,7 +491,7 @@ void BezierTriangle::render(const triple *p, triple p0=0.5*(P1+P2); if(!flat0) { - if((flat0=Straightness(r300,p210,p120,u030) < res3)) + if((flat0=Straightness(r300,p210,p120,u030) < res2)) p0 -= Epsilon*unit(derivative(c[0],c[2],c[5],c[9])+ derivative(c[0],c[1],c[3],c[6])); else p0=r030; @@ -498,7 +499,7 @@ void BezierTriangle::render(const triple *p, triple p1=0.5*(P2+P0); if(!flat1) { - if((flat1=Straightness(l003,p012,p021,u030) < res3)) + if((flat1=Straightness(l003,p012,p021,u030) < res2)) p1 -= Epsilon*unit(derivative(c[6],c[3],c[1],c[0])+ derivative(c[6],c[7],c[8],c[9])); else p1=l030; @@ -506,7 +507,7 @@ void BezierTriangle::render(const triple *p, triple p2=0.5*(P0+P1); if(!flat2) { - if((flat2=Straightness(l003,p102,p201,r300) < res3)) + if((flat2=Straightness(l003,p102,p201,r300) < res2)) p2 -= Epsilon*unit(derivative(c[9],c[8],c[7],c[6])+ derivative(c[9],c[5],c[2],c[0])); else p2=l300; |