#include "mmscene.h" #include "glpoint.h" #include "glcolorrgba.h" MMScene::MMScene(QQuickItem *parent) :GLItem(parent) { m_vertexShaderFilename = ":/shaders/vshader.vsh"; m_eye = 20.0 * v_XYZ; } MMScene::~MMScene() { } void MMScene::paintUnderQmlScene() { m_renderer->pushMvMatrix(); // drawAxes(2.5); drawTriangles(); m_renderer->popMvMatrix(); } void MMScene::paintOnTopOfQmlScene() { m_renderer->pushMvMatrix(); drawAxes(10); drawTriangles(); m_renderer->popMvMatrix(); } void MMScene::setupGeometry() { drawF(5.0); 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); renderer()->activateAttributeArray(GLESRenderer::VERTEX_LOCATION, m_points[0].vertexPointer(), stride); renderer()->activateAttributeArray(GLESRenderer::NORMAL_LOCATION, m_points[0].normalPointer(), stride); renderer()->activateAttributeArray(GLESRenderer::TEXCOORD_LOCATION, m_points[0].texCoordPointer(), stride); renderer()->activateAttributeArray(GLESRenderer::COLOR_LOCATION, m_points[0].colorPointer(), stride); glDrawArrays(GL_TRIANGLES, 0, 36); renderer()->disableAttributeArrays(); } void MMScene::createCube(const QVector3D &lbb, const QVector3D &rtf) { QVector3D n0 = QVector3D(0.0, 0.0, 1.0); //dummy normal QVector3D t0 = QVector3D(0.0, 0.0, 0.0); //dummy texture // 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()); // Bottom plane m_points.append(GLPoint(lbb, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(lbf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rbb, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rbf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(lbf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rbb, n0, t0, GLColorRgba::clRed)); // Back plane m_points.append(GLPoint(lbb, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rbb, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(ltb, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rtb, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rbb, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(ltb, n0, t0, GLColorRgba::clGreen)); // Left plane m_points.append(GLPoint(lbb, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(lbf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(ltb, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(ltf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(lbf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(ltb, n0, t0, GLColorRgba::clBlue)); // Right plane m_points.append(GLPoint(rbb, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(rbf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(rtb, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(rtf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(rbf, n0, t0, GLColorRgba::clBlue)); m_points.append(GLPoint(rtb, n0, t0, GLColorRgba::clBlue)); // Top plane m_points.append(GLPoint(ltb, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(ltf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rtb, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rtf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(ltf, n0, t0, GLColorRgba::clRed)); m_points.append(GLPoint(rtb, n0, t0, GLColorRgba::clRed)); // Front plane m_points.append(GLPoint(lbf, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rbf, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(ltf, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rtf, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(rbf, n0, t0, GLColorRgba::clGreen)); m_points.append(GLPoint(ltf, n0, t0, GLColorRgba::clGreen)); } void MMScene::createF(double height) { float stdLength = height/5.0; createCube(QVector3D(0.0, 0.0, 0.0),QVector3D(stdLength, height, stdLength)); createCube(QVector3D(stdLength, height, 0.0),QVector3D(3.0 * stdLength, height - 1.0 * stdLength, stdLength)); createCube(QVector3D(stdLength, height - 2.0 * stdLength, 0.0),QVector3D(2.0 * stdLength, height - 3.0 * stdLength, stdLength)); } void MMScene::drawF(double height) { m_renderer->pushMvMatrix(); m_renderer->scale(QVector3D(10.0, 10.0, 10.0)); createCube(QVector3D(0.0, 0.0, 0.0), QVector3D(1.0, 1.0, 1.0)); m_renderer->popMvMatrix(); }