summaryrefslogtreecommitdiff
path: root/src/primitives.cc
diff options
context:
space:
mode:
authorGiles Bathgate <gilesbathgate@gmail.com>2011-03-22 19:50:59 (GMT)
committerGiles Bathgate <gilesbathgate@gmail.com>2011-03-22 19:50:59 (GMT)
commit5eed043d5330b4283a27b438f0c6f95a9e08504a (patch)
treed14edd3ff26b182d40b9191d96a4b954d88808e1 /src/primitives.cc
parent420c36603b8ba8e7fcf2988ccef4774130d39511 (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.cc20
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);
+ }
}
}
contact: Jan Huwald // Impressum