Exemple #1
0
void ScanBox::scanTriangle()
{
	// sort so that ca.dy > bc.dy > ab.dy
	if (ab.dy > bc.dy) {
		Edge t = ab;
		ab = bc;
		bc = t;
	}
	if (ab.dy > ca.dy) {
		Edge t = ab;
		ab = ca;
		ca = t;
	}
	if (bc.dy > ca.dy) {
		Edge t = bc;
		bc = ca;
		ca = t;
	}

	// shouldnt be possible, anyway
	if (ca.dy == 0)
		return;

	if (ab.dy > 0.0)
		scanSpans(ca, ab);

	if (bc.dy > 0.0)
		scanSpans(ca, bc);
}
// scan-line conversion
static void scanTriangle(const mbgl::vec2<double> a, const mbgl::vec2<double> b, const mbgl::vec2<double> c, int32_t ymin, int32_t ymax, ScanLine& scanLine) {
    edge ab = edge(a, b);
    edge bc = edge(b, c);
    edge ca = edge(c, a);

    // sort edges by y-length
    if (ab.dy > bc.dy) { std::swap(ab, bc); }
    if (ab.dy > ca.dy) { std::swap(ab, ca); }
    if (bc.dy > ca.dy) { std::swap(bc, ca); }

    // scan span! scan span!
    if (ab.dy) scanSpans(ca, ab, ymin, ymax, scanLine);
    if (bc.dy) scanSpans(ca, bc, ymin, ymax, scanLine);
}