summaryrefslogtreecommitdiffstats
path: root/src/glcube.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/glcube.cpp')
-rw-r--r--src/glcube.cpp90
1 files changed, 90 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();
+}