From af64f953d4f01a7c7bd3415ff5edfff8d4f7c48d Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 6 Oct 2015 12:52:40 +0200 Subject: Initial commit --- src/mmscene.cpp | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/mmscene.cpp (limited to 'src/mmscene.cpp') diff --git a/src/mmscene.cpp b/src/mmscene.cpp new file mode 100644 index 0000000..1aca89f --- /dev/null +++ b/src/mmscene.cpp @@ -0,0 +1,89 @@ +#include "mmscene.h" +#include "glpoint.h" +#include "glcolorrgba.h" + +MMScene::MMScene(QQuickItem *parent) + :GLItem(parent) +{ + m_vertexShaderFilename = ":/shaders/vshader.vsh"; + m_eye = 2.5 * v_XYZ; + +} + +MMScene::~MMScene() +{ + +} + +void MMScene::paintUnderQmlScene() +{ + m_renderer->pushMvMatrix(); + // drawAxes(2.5); + drawTriangles(); + m_renderer->popMvMatrix(); +} + +void MMScene::paintOnTopOfQmlScene() +{ + m_renderer->pushMvMatrix(); + drawAxes(2.5); + drawTriangles(); + m_renderer->popMvMatrix(); +} + +void MMScene::setupGeometry() +{ + //Now we create the geometry. Every corner needs a vertex, a normal, a color and a texture, + //although normal and texture are not used for basic rendering. + QVector3D v00 = QVector3D(0.0, 0.0, 0.0); + QVector3D v01 = QVector3D(1.0, 0.0, 0.0); + QVector3D v02 = QVector3D(0.0, 1.0, 0.0); + QVector3D n0 = QVector3D(0.0, 0.0, 1.0); //dummy normal + QVector3D t0 = QVector3D(0.0,0.0,0.0); //dummy texture + + //append the vertices for the triangle + m_points.append(GLPoint(v00, n0, t0, GLColorRgba::clRed)); + m_points.append(GLPoint(v01, n0, t0, GLColorRgba::clGreen)); + m_points.append(GLPoint(v02, n0, t0, GLColorRgba::clBlue)); + + QVector3D v10 = QVector3D(1.0, 1.0, 0.0); + QVector3D v11 = QVector3D(1.0, 0.0, 0.0); + QVector3D v12 = QVector3D(0.0, 1.0, 0.0); + + //append the vertices for the triangle + m_points.append(GLPoint(v10, n0, t0, GLColorRgba::clRed)); + m_points.append(GLPoint(v11, n0, t0, GLColorRgba::clGreen)); + m_points.append(GLPoint(v12, n0, t0, GLColorRgba::clBlue)); + + m_colorArrayEnabled = true; + + m_geometryIsValid = true; +} + +void MMScene::drawTriangles() +{ + renderer()->setLightingEnabled(m_lightingEnabled); + renderer()->setColorArrayEnabled(m_colorArrayEnabled); + renderer()->setTextureEnabled(false); + + //enable required arrays + int stride = sizeof(GLPoint); + for(int i = 0; i < m_points.length(); i += 3) + { + if(i > m_lastAxesPoint || i < m_firstAxesPoint) + { + renderer()->activateAttributeArray(GLESRenderer::VERTEX_LOCATION, + m_points[i].vertexPointer(), stride); + renderer()->activateAttributeArray(GLESRenderer::NORMAL_LOCATION, + m_points[i].normalPointer(), stride); + renderer()->activateAttributeArray(GLESRenderer::TEXCOORD_LOCATION, + m_points[i].texCoordPointer(), stride); + renderer()->activateAttributeArray(GLESRenderer::COLOR_LOCATION, + m_points[i].colorPointer(), stride); + + glDrawArrays(GL_TRIANGLES, 0, 3); + } + } + renderer()->disableAttributeArrays(); +} + -- cgit v1.2.3-70-g09d2