summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cubehole.cpp206
-rw-r--r--Cubehole.h53
-rw-r--r--Trapezocube.cpp78
-rw-r--r--Trapezocube.h55
4 files changed, 392 insertions, 0 deletions
diff --git a/Cubehole.cpp b/Cubehole.cpp
new file mode 100644
index 0000000..e755e45
--- /dev/null
+++ b/Cubehole.cpp
@@ -0,0 +1,206 @@
+#include "Cubehole.h"
+#include "gl.h"
+
+std::list<Triangle> Cubehole::getTriangles(const Matrix &modelview)
+{
+ std::list<Triangle> triangles;
+ // width, height, depth
+ // Front face
+ Color c(0.0, 0.0, 1.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y+height/2, z+depth/2),
+ Vertex(x+width/2, y+height/2, z+depth/2),
+ Vertex(x-width/2, y-height/2, z+depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y-height/2, z+depth/2),
+ Vertex(x+width/2, y+height/2, z+depth/2),
+ Vertex(x+width/2, y-height/2, z+depth/2), c));
+
+ // Back face
+ c = Color(1.0, 1.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y+height/2, z-depth/2),
+ Vertex(x-width/2, y-height/2, z-depth/2),
+ Vertex(x+width/2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y-height/2, z-depth/2),
+ Vertex(x+width/2, y+height/2, z-depth/2),
+ Vertex(x+width/2, y-height/2, z-depth/2), c));
+
+ // Left face
+ c = Color(0.0, 1.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y+height/2, z+depth/2),
+ Vertex(x-width/2, y-height/2, z+depth/2),
+ Vertex(x-width/2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y-height/2, z-depth/2),
+ Vertex(x-width/2, y+height/2, z-depth/2),
+ Vertex(x-width/2, y-height/2, z+depth/2), c));
+
+ // Right face
+
+ triangles.push_back(Triangle(Vertex(x+width/2, y+height/2, z+depth/2),
+ Vertex(x+width/2, y-height/2, z+depth/2),
+ Vertex(x+width/2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+width/2, y-height/2, z-depth/2),
+ Vertex(x+width/2, y+height/2, z-depth/2),
+ Vertex(x+width/2, y-height/2, z+depth/2), c));
+
+ // Top face
+ c = Color(1.0, 0.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y+height/2, z+depth/2),
+ Vertex(x+width/2, y+height/2, z+depth/2),
+ Vertex(x-width/2, y+height/2, z+innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+width/2, y+height/2, z+depth/2),
+ Vertex(x+width/2, y+height/2, z+innerdepth/2),
+ Vertex(x-width/2, y+height/2, z+innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y+height/2, z-depth/2),
+ Vertex(x+width/2, y+height/2, z-depth/2),
+ Vertex(x-width/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+width/2, y+height/2, z-depth/2),
+ Vertex(x+width/2, y+height/2, z-innerdepth/2),
+ Vertex(x-width/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x- width/2, y+height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y+height/2, z-innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x- width/2, y+height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x- width/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+ width/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x+ width/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x+ width/2, y+height/2, z-innerdepth/2), c));
+
+ // Bottom face
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y-height/2, z+depth/2),
+ Vertex(x+width/2, y-height/2, z+depth/2),
+ Vertex(x-width/2, y-height/2, z+innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x+width/2, y-height/2, z+depth/2),
+ Vertex(x+width/2, y-height/2, z+innerdepth/2),
+ Vertex(x-width/2, y-height/2, z+innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-width/2, y-height/2, z-depth/2),
+ Vertex(x+width/2, y-height/2, z-depth/2),
+ Vertex(x-width/2, y-height/2, z-innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x+width/2, y-height/2, z-depth/2),
+ Vertex(x+width/2, y-height/2, z-innerdepth/2),
+ Vertex(x-width/2, y-height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x- width/2, y-height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z-innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x- width/2, y-height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x- width/2, y-height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+ width/2, y-height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z-innerdepth/2), c));
+ triangles.push_back(Triangle(Vertex(x+ width/2, y-height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x+ width/2, y-height/2, z-innerdepth/2), c));
+
+ // FrontInner face
+ c = Color(1.0, 1.0, 1.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z+innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y-height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z+innerdepth/2), c));
+
+ // BackInner face
+ c = Color(1.0, 0.5, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z-innerdepth/2), c));
+
+ // LeftInner face
+ c = Color(0.0, 1.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z+innerdepth/2),
+ Vertex(x-innerwidth/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x-innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x-innerwidth/2, y-height/2, z+innerdepth/2), c));
+
+ // RightInner face
+
+ triangles.push_back(Triangle(Vertex(x+innerwidth/2, y+height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z+innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+innerwidth/2, y-height/2, z-innerdepth/2),
+ Vertex(x+innerwidth/2, y+height/2, z-innerdepth/2),
+ Vertex(x+innerwidth/2, y-height/2, z+innerdepth/2), c));
+
+ for(std::list<Triangle>::iterator t = triangles.begin(); t != triangles.end(); ++t) {
+ t->transform(modelview);
+ }
+
+ return triangles;
+}
+
+float Cubehole::getHeight()
+{
+ return height;
+}
+
+float Cubehole::getWidth()
+{
+ return width;
+}
+
+float Cubehole::getDepth()
+{
+ return depth;
+}
+
+float Cubehole::getPosX()
+{
+ return x;
+}
+
+float Cubehole::getPosY()
+{
+ return y;
+}
+
+float Cubehole::getPosZ()
+{
+ return z;
+}
+
+void Cubehole::setSize(float w, float h, float d)
+{
+ width = w;
+ height = h;
+ depth = d;
+}
+
+void Cubehole::setPos(float x, float y, float z)
+{
+ this->x = x;
+ this->y = y;
+ this->z = z;
+}
diff --git a/Cubehole.h b/Cubehole.h
new file mode 100644
index 0000000..3f8f689
--- /dev/null
+++ b/Cubehole.h
@@ -0,0 +1,53 @@
+#ifndef _CUBEHOLE_H_
+#define _CUBEHOLE_H_
+
+#include "Triangle.h"
+#include "Matrix.h"
+
+#include <list>
+
+class Cubehole
+{
+ public:
+ Cubehole(): width(0), height(0), depth(0), x(0), y(0), z(0), innerwidth(0), innerdepth(0) {}
+ Cubehole(float width, float height, float depth): x(0), y(0), z(0), innerwidth(0), innerdepth(0){
+ setSize(width, height, depth);
+ }
+ Cubehole(float width, float height, float depth, float x, float y, float z): innerwidth(0), innerdepth(0) {
+ setSize(width, height, depth);
+ setPos(x, y, z);
+ }
+ Cubehole(float width, float height, float depth, float x, float y, float z, float innerwidth, float innerdepth) {
+ setSize(width, height, depth);
+ setPos(x, y, z);
+ setInnerSize(innerwidth, innerdepth);
+ }
+ float getHeight();
+ float getWidth();
+ float getDepth();
+ float getPosX();
+ float getPosY();
+ float getPosZ();
+ float getInnerWidth()
+ {
+ return innerwidth;
+ }
+ float getInnerDepth()
+ {
+ return innerdepth;
+ }
+ void setInnerSize(float iw, float id)
+ {
+ innerwidth = iw;
+ innerdepth = id;
+ }
+ void setSize(float w, float h, float d);
+ void setPos(float x, float y, float z);
+ std::list<Triangle> getTriangles(const Matrix &modelview);
+
+ private:
+ float x, y, z, width, height, depth, innerwidth, innerdepth;
+
+};
+
+#endif /*_CUBEHOLE_H_*/
diff --git a/Trapezocube.cpp b/Trapezocube.cpp
new file mode 100644
index 0000000..e9877de
--- /dev/null
+++ b/Trapezocube.cpp
@@ -0,0 +1,78 @@
+#include "Trapezocube.h"
+
+std::list<Triangle> Trapezocube::getTriangles(const Matrix &modelview)
+{
+ std::list<Triangle> triangles;
+ // width, height, depth
+ //glRotatef(rotate, 0.0, 1.0, 0.0);
+ // Front face
+ Color c(0.0, 0.0, 1.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-widthfront/2, y+height/2, z+depth/2),
+ Vertex(x+widthfront/2, y+height/2, z+depth/2),
+ Vertex(x-widthfront/2, y-height/2, z+depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-widthfront/2, y-height/2, z+depth/2),
+ Vertex(x+widthfront/2, y+height/2, z+depth/2),
+ Vertex(x+widthfront/2, y-height/2, z+depth/2), c));
+
+ // Back face
+ c = Color(1.0, 1.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-widthback/2, y+height/2, z-depth/2),
+ Vertex(x-widthback/2, y-height/2, z-depth/2),
+ Vertex(x+widthback/2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-widthback/2, y-height/2, z-depth/2),
+ Vertex(x+widthback/2, y+height/2, z-depth/2),
+ Vertex(x+widthback/2, y-height/2, z-depth/2), c));
+
+ // Left face
+ c = Color(0.0, 1.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-widthfront /2, y+height/2, z+depth/2),
+ Vertex(x-widthfront /2, y-height/2, z+depth/2),
+ Vertex(x-widthback /2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x-widthback /2, y-height/2, z-depth/2),
+ Vertex(x-widthback /2, y+height/2, z-depth/2),
+ Vertex(x-widthfront /2, y-height/2, z+depth/2), c));
+
+ // Right face
+
+ triangles.push_back(Triangle(Vertex(x+widthfront/2, y+height/2, z+depth/2),
+ Vertex(x+widthfront/2, y-height/2, z+depth/2),
+ Vertex(x+widthback /2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+widthback /2, y-height/2, z-depth/2),
+ Vertex(x+widthback /2, y+height/2, z-depth/2),
+ Vertex(x+widthfront/2, y-height/2, z+depth/2), c));
+
+ // Top face
+ c = Color(1.0, 0.0, 0.0, 0.5);
+
+ triangles.push_back(Triangle(Vertex(x-widthfront/2, y+height/2, z+depth/2),
+ Vertex(x+widthfront/2, y+height/2, z+depth/2),
+ Vertex(x-widthback /2, y+height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+widthfront/2, y+height/2, z+depth/2),
+ Vertex(x+widthback /2, y+height/2, z-depth/2),
+ Vertex(x-widthback /2, y+height/2, z-depth/2), c));
+
+ // Bottom face
+
+ triangles.push_back(Triangle(Vertex(x-widthfront/2, y-height/2, z+depth/2),
+ Vertex(x+widthfront/2, y-height/2, z+depth/2),
+ Vertex(x-widthback /2, y-height/2, z-depth/2), c));
+
+ triangles.push_back(Triangle(Vertex(x+widthfront/2, y-height/2, z+depth/2),
+ Vertex(x+widthback /2, y-height/2, z-depth/2),
+ Vertex(x-widthback /2, y-height/2, z-depth/2), c));
+
+ for(std::list<Triangle>::iterator t = triangles.begin(); t != triangles.end(); ++t) {
+ t->transform(modelview);
+ }
+
+ return triangles;
+}
+
diff --git a/Trapezocube.h b/Trapezocube.h
new file mode 100644
index 0000000..b2cdd9a
--- /dev/null
+++ b/Trapezocube.h
@@ -0,0 +1,55 @@
+#ifndef _TRAPEZOCUBE_H_
+#define _TRAPEZOCUBE_H_
+
+#include "gl.h"
+#include "Color.h"
+#include "Triangle.h"
+#include <list>
+
+class Trapezocube
+{
+ public:
+ Trapezocube(): widthfront(0), widthback(0), height(0), depth(0), x(0), y(0), z(0) {}
+ Trapezocube(float widthfront, float widthback, float height, float depth): x(0), y(0), z(0){
+ setSize(widthfront, widthback, height, depth);
+ }
+ Trapezocube(float widthfront, float widthback, float height, float depth, float x, float y, float z): rotate(0) {
+ setSize(widthfront, widthback, height, depth);
+ setPos(x, y, z);
+ }
+ Trapezocube(float widthfront, float widthback, float height, float depth, float x, float y, float z, float rotate) {
+ setSize(widthfront, widthback, height, depth);
+ setPos(x, y, z);
+ setRotate(rotate);
+ }
+ float getHeight() {return height;}
+ float getWidthFront() {return widthfront;}
+ float getWidthBack() {return widthback;}
+ float getDepth() {return depth;}
+ float getPosX() {return x;}
+ float getPosY() {return y;}
+ float getPosZ() {return z;}
+ float getRotate() {return rotate;}
+ void setSize(float wf, float wb, float h, float d)
+ {
+ widthfront = wf;
+ widthback = wb;
+ height = h;
+ depth = d;
+ }
+ void setPos(float x, float y, float z)
+ {
+ this->x = x;
+ this->y = y;
+ this->z = z;
+ }
+ void setRotate(float r) {rotate = r;}
+ void setColor(Color col) {color = col;}
+ std::list<Triangle> getTriangles(const Matrix &modelview);
+
+ private:
+ float x, y, z, widthfront, widthback, height, depth, rotate;
+ Color color;
+};
+
+#endif /*_TRAPEZOCUBE_H_ */