Exemplo n.º 1
0
static void clip(double x1,double y1,double z1,double u1,double v1,double w1,  double x2,double y2,double z2,double u2,double v2,double w2,  double x3,double y3,double z3,double u3,double v3,double w3) {
	//TODO: FIX CLIPPING ERROR

	int w1N = w1 < pseudoNear,
		w2N = w2 < pseudoNear,
		w3N = w3 < pseudoNear;
			
	if(w1N && !w2N && !w3N) {
		clipQuad(x1,y1,z1,u1,v1,w1,
			x2,y2,z2,u2,v2,w2,
			x3,y3,z3,u3,v3,w3);
	}
	else if(!w1N && w2N && !w3N) {
		clipQuad(x2,y2,z2,u2,v2,w2,
			x3,y3,z3,u3,v3,w3,
			x1,y1,z1,u1,v1,w1);
	}
	else if(!w1N && !w2N && w3N) {
		clipQuad(x3,y3,z3,u3,v3,w3,
			x1,y1,z1,u1,v1,w1,
			x2,y2,z2,u2,v2,w2);
	}
	else if(!w1N) {
		clipTriangle(x1,y1,z1,u1,v1,w1,
			x2,y2,z2,u2,v2,w2,
			x3,y3,z3,u3,v3,w3);
	}
	else if(!w2N) {
		clipTriangle(x2,y2,z2,u2,v2,w2,
			x3,y3,z3,u3,v3,w3,
			x1,y1,z1,u1,v1,w1);
	}
	else if(!w3N) {
		clipTriangle(x3,y3,z3,u3,v3,w3,
			x1,y1,z1,u1,v1,w1,
			x2,y2,z2,u2,v2,w2);
	}
}
Exemplo n.º 2
0
 void VirtualFont::addTransformedCluster(const Cluster &cluster, const Vec2f &position)
 {
     for (auto &shape : cluster.shapes)
     {
         Quad quad;
         auto glyph = cluster.font->fillQuad(quad, shape, position, sizeRatio);
         
         if (glyph)
         {
             if (!hasClip || clipQuad(quad, glyph->texture))
             {
                 auto batch = batchMap->getBatch(glyph->texture);
                 matrix.addTransformedQuad(quad, batch->vertices);
                 incrementSequence(batch);
             }
         }
     }
 }
Exemplo n.º 3
0
 void VirtualFont::addCluster(const Cluster &cluster, const Vec3f &position)
 {
     for (auto &shape : cluster.shapes)
     {
         Vec2f p = properties.useMipmap ? position.xy() : Vec2f(snap(position.x), snap(position.y));
         
         Quad quad;
         auto glyph = cluster.font->fillQuad(quad, shape, p, sizeRatio);
         
         if (glyph)
         {
             if (!hasClip || clipQuad(quad, glyph->texture))
             {
                 auto batch = batchMap->getBatch(glyph->texture);
                 batch->addQuad(quad, position.z);
                 incrementSequence(batch);
             }
         }
     }
 }