diff options
author | Giles Bathgate <gilesbathgate@gmail.com> | 2011-03-22 19:50:59 (GMT) |
---|---|---|
committer | Giles Bathgate <gilesbathgate@gmail.com> | 2011-03-22 19:50:59 (GMT) |
commit | 5eed043d5330b4283a27b438f0c6f95a9e08504a (patch) | |
tree | d14edd3ff26b182d40b9191d96a4b954d88808e1 /src/primitives.cc | |
parent | 420c36603b8ba8e7fcf2988ccef4774130d39511 (diff) |
Optimised cylinder generation.
When the sides are vertical we can use 4 sided polygons instead of
triangles to define the sides, this reduces the facet count for the
sides of the cylinder by half.
Diffstat (limited to 'src/primitives.cc')
-rw-r--r-- | src/primitives.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/primitives.cc b/src/primitives.cc index d0cd1b5..a971683 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -377,17 +377,25 @@ sphere_next_r2: for (int i=0; i<fragments; i++) { int j = (i+1) % fragments; - if (r1 > 0) { + if (r1 == r2) { p->append_poly(); p->insert_vertex(circle1[i].x, circle1[i].y, z1); p->insert_vertex(circle2[i].x, circle2[i].y, z2); - p->insert_vertex(circle1[j].x, circle1[j].y, z1); - } - if (r2 > 0) { - p->append_poly(); - p->insert_vertex(circle2[i].x, circle2[i].y, z2); p->insert_vertex(circle2[j].x, circle2[j].y, z2); p->insert_vertex(circle1[j].x, circle1[j].y, z1); + } else { + if (r1 > 0) { + p->append_poly(); + p->insert_vertex(circle1[i].x, circle1[i].y, z1); + p->insert_vertex(circle2[i].x, circle2[i].y, z2); + p->insert_vertex(circle1[j].x, circle1[j].y, z1); + } + if (r2 > 0) { + p->append_poly(); + p->insert_vertex(circle2[i].x, circle2[i].y, z2); + p->insert_vertex(circle2[j].x, circle2[j].y, z2); + p->insert_vertex(circle1[j].x, circle1[j].y, z1); + } } } |