summaryrefslogtreecommitdiffstats
path: root/src/glcube.cpp
blob: a80aaba5aa02abe9e7d763513790c398bb562686 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "glcube.h"

GLCube::GLCube(QVector3D lbb, QVector3D rtf, const GLColorRgba &m_color,
               const QString m_textureFile)
    : GLBody(lbb.distanceToPoint(rtf), m_color, m_textureFile)
{
    m_lbb = lbb;
    m_rtf = rtf;
}

void GLCube::makeSurface(QVector<GLPoint> *pointContainer,
                         QVector<GLshort> *indexContainer)
{
    GLBody::makeSurface(pointContainer, indexContainer);

    QVector3D t0 = QVector3D(0.0, 0.0, 0.0); //dummy texture

    // Create all the vectors for caching
    QVector3D lbf = QVector3D(m_lbb.x(), m_lbb.y(), m_rtf.z());
    QVector3D rbb = QVector3D(m_rtf.x(), m_lbb.y(), m_lbb.z());
    QVector3D rbf = QVector3D(m_rtf.x(), m_lbb.y(), m_rtf.z());
    QVector3D ltb = QVector3D(m_lbb.x(), m_rtf.y(), m_lbb.z());
    QVector3D ltf = QVector3D(m_lbb.x(), m_rtf.y(), m_rtf.z());
    QVector3D rtb = QVector3D(m_rtf.x(), m_rtf.y(), m_lbb.z());

    // Calculate all normal vectors per side
    QVector3D nTop = v_Y;//QVector3D::normal(ltb - m_rtf, rtb - ltf);
    QVector3D nBottom = -v_Y;//QVector3D::normal(m_lbb - rbf, rbb - lbf);
    QVector3D nBack = -v_Z;//QVector3D::normal(m_lbb - rtb, ltb - rbb);
    QVector3D nFront = v_Z;//QVector3D::normal(lbf - m_rtf, ltf - m_rtf);
    QVector3D nLeft = -v_X;//QVector3D::normal(m_lbb - ltf, lbf - ltb);
    QVector3D nRight = v_X;//QVector3D::normal(rbb - m_rtf, rbf - rtb);

    m_firstPoint = m_points->size();

    // Bottom plane
    m_points->append(GLPoint(m_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(m_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(m_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(m_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(m_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(m_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();
}