half_edge tetraedron(gl_vertex *v1, gl_vertex *v2, gl_vertex *v3, gl_vertex *v4) { half_edge e12 = create_triangle(v1, v2, v3); half_edge e21 = e12 -> opp; half_edge e13 = e12 -> next; half_edge e31 = e13 -> opp; half_edge e32 = e31 -> next; add_vertex_to_edge(e21,v4); half_edge e24 = e21 -> next; half_edge e42 = e24 -> opp; half_edge e41 = e42 -> next; close_triangle(e32,e24); half_edge e34 = e32 -> next; fill_triangle(e13,e34,e41); return e12; }
DEF_TEST(Vertices_clipping, reporter) { // A very large triangle has to be geometrically clipped (since its "fast" clipping is // normally done in after building SkFixed coordinates). Check that we handle this. // (and don't assert). auto surf = SkSurface::MakeRasterN32Premul(3, 3); SkPoint pts[] = { { -10, 1 }, { -10, 2 }, { 1e9f, 1.5f } }; fill_triangle(surf->getCanvas(), pts, SK_ColorBLACK); sk_tool_utils::PixelIter iter(surf.get()); SkIPoint loc; while (void* addr = iter.next(&loc)) { SkPMColor c = *(SkPMColor*)addr; if (loc.fY == 1) { REPORTER_ASSERT(reporter, c == 0xFF000000); } else { REPORTER_ASSERT(reporter, c == 0); } } }
int wmain(int argc, wchar_t* argv[]) { Point2d points[3] = { { 100, 0 }, { 0, 200 }, { 200, 300 } }; Points2dv pdv1({ {100, 0}, { 0, 200 }, { 200, 300 } }); Points2dv pdv2({ {100, 0}, { 200, 300 }, { 0, 200 } }); Points2dv pdv3({ {0, 200}, { 100, 0 }, { 200, 300 } }); Points2dv pdv4({ {0, 200}, { 200, 300 }, { 100, 0 } }); Points2dv pdv5({ {200, 300}, { 100, 0 }, { 0, 200 } }); Points2dv pdv6({ {200, 300}, { 0, 200 }, { 100, 0 } }); fill_triangle(pdv1); fill_triangle(pdv2); fill_triangle(pdv3); fill_triangle(pdv4); fill_triangle(pdv5); fill_triangle(pdv6); return 0; }
void Canvas::fill_triangle(const Trianglef &dest_triangle, const Colorf &color) { fill_triangle(dest_triangle.p, dest_triangle.q, dest_triangle.r, color); }
/* Remplit un triangle dont les sommets sont les points (x1, y1), (x2, y2) et (x3, y3) */ void TrianglePlein(int x1, int y1, int x2, int y2, int x3, int y3) { fill_triangle(fenetreCourante, x1, y1, x2, y2, x3, y3); }