summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-11-03 11:15:22 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-11-03 11:15:22 +0100
commit4877fdb850bdc939e8d2a3efe9ccd6a383052fb3 (patch)
tree16768c6542d9de93105e8ed323189ad8efe0b59f /src
parent4c1c738f6dc00746bf14bec50b5dfc5b69772977 (diff)
downloadMultimedia-4877fdb850bdc939e8d2a3efe9ccd6a383052fb3.tar.gz
Multimedia-4877fdb850bdc939e8d2a3efe9ccd6a383052fb3.zip
Add GLCube
Diffstat (limited to 'src')
-rw-r--r--src/glcube.cpp90
-rw-r--r--src/glcube.h16
2 files changed, 106 insertions, 0 deletions
diff --git a/src/glcube.cpp b/src/glcube.cpp
new file mode 100644
index 0000000..c5f9332
--- /dev/null
+++ b/src/glcube.cpp
@@ -0,0 +1,90 @@
+#include "glcube.h"
+
+GLCube::GLCube(float m_width, const GLColorRgba &m_color, const QString m_textureFile)
+ :GLBody(m_width, m_color, m_textureFile)
+{
+}
+
+void GLCube::makeSurface(QVector<GLPoint> *pointContainer, QVector<GLshort> *indexContainer)
+{
+ GLBody::makeSurface(pointContainer, indexContainer);
+
+ QVector3D t0 = QVector3D(0.0, 0.0, 0.0); //dummy texture
+
+ QVector3D lbb = QVector3D(0.0, 0.0, 0.0);
+ QVector3D rtf = QVector3D(1.0, 1.0, 1.0);
+
+ // Create all the vectors for caching
+ QVector3D lbf = QVector3D(lbb.x(), lbb.y(), rtf.z());
+ QVector3D rbb = QVector3D(rtf.x(), lbb.y(), lbb.z());
+ QVector3D rbf = QVector3D(rtf.x(), lbb.y(), rtf.z());
+ QVector3D ltb = QVector3D(lbb.x(), rtf.y(), lbb.z());
+ QVector3D ltf = QVector3D(lbb.x(), rtf.y(), rtf.z());
+ QVector3D rtb = QVector3D(rtf.x(), rtf.y(), lbb.z());
+
+ // Calculate all normal vectors per side
+ QVector3D nTop = v_Y;//QVector3D::normal(ltb - rtf, rtb - ltf);
+ QVector3D nBottom = -v_Y;//QVector3D::normal(lbb - rbf, rbb - lbf);
+ QVector3D nBack = -v_Z;//QVector3D::normal(lbb - rtb, ltb - rbb);
+ QVector3D nFront = v_Z;//QVector3D::normal(lbf - rtf, ltf - rtf);
+ QVector3D nLeft = -v_X;//QVector3D::normal(lbb - ltf, lbf - ltb);
+ QVector3D nRight = v_X;//QVector3D::normal(rbb - rtf, rbf - rtb);
+
+ m_firstPoint = m_points->size();
+
+ // Bottom plane
+ m_points->append(GLPoint(lbb, nBottom, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(lbf, nBottom, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(rbb, nBottom, t0, GLColorRgba::clRed));
+
+ m_points->append(GLPoint(rbf, nBottom, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(lbf, nBottom, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(rbb, nBottom, t0, GLColorRgba::clRed));
+
+ // Back plane
+ m_points->append(GLPoint(lbb, nBack, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(rbb, nBack, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(ltb, nBack, t0, GLColorRgba::clGreen));
+
+ m_points->append(GLPoint(rtb, nBack, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(rbb, nBack, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(ltb, nBack, t0, GLColorRgba::clGreen));
+
+ // Left plane
+ m_points->append(GLPoint(lbb, nLeft, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(lbf, nLeft, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(ltb, nLeft, t0, GLColorRgba::clBlue));
+
+ m_points->append(GLPoint(ltf, nLeft, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(lbf, nLeft, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(ltb, nLeft, t0, GLColorRgba::clBlue));
+
+ // Right plane
+ m_points->append(GLPoint(rbb, nRight, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(rbf, nRight, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(rtb, nRight, t0, GLColorRgba::clBlue));
+
+ m_points->append(GLPoint(rtf, nRight, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(rbf, nRight, t0, GLColorRgba::clBlue));
+ m_points->append(GLPoint(rtb, nRight, t0, GLColorRgba::clBlue));
+
+ // Top plane
+ m_points->append(GLPoint(ltb, nTop, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(ltf, nTop, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(rtb, nTop, t0, GLColorRgba::clRed));
+
+ m_points->append(GLPoint(rtf, nTop, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(ltf, nTop, t0, GLColorRgba::clRed));
+ m_points->append(GLPoint(rtb, nTop, t0, GLColorRgba::clRed));
+
+ // Front plane
+ m_points->append(GLPoint(lbf, nFront, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(rbf, nFront, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(ltf, nFront, t0, GLColorRgba::clGreen));
+
+ m_points->append(GLPoint(rtf, nFront, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(rbf, nFront, t0, GLColorRgba::clGreen));
+ m_points->append(GLPoint(ltf, nFront, t0, GLColorRgba::clGreen));
+
+ m_nextPoint = m_points->size();
+}
diff --git a/src/glcube.h b/src/glcube.h
new file mode 100644
index 0000000..c2b7e14
--- /dev/null
+++ b/src/glcube.h
@@ -0,0 +1,16 @@
+#ifndef GLCUBE_H
+#define GLCUBE_H
+
+#include "glbody.h"
+
+class GLCube : public GLBody
+{
+public:
+ GLCube(float m_width = 1.0, const GLColorRgba & m_color = GLColorRgba::clBlue, const QString m_textureFile = "");
+
+ // GLBody interface
+public:
+ virtual void makeSurface(QVector<GLPoint> *pointContainer, QVector<GLshort> *indexContainer);
+};
+
+#endif // GLCUBE_H