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); }