#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(10); 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(); }