From 4877fdb850bdc939e8d2a3efe9ccd6a383052fb3 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 3 Nov 2015 11:15:22 +0100 Subject: Add GLCube --- src/glcube.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/glcube.h | 16 +++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/glcube.cpp create mode 100644 src/glcube.h (limited to 'src') 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 *pointContainer, QVector *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 *pointContainer, QVector *indexContainer); +}; + +#endif // GLCUBE_H -- cgit v1.2.3-70-g09d2