SHARE
TWEET

Untitled

a guest Dec 29th, 2014 7 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. BoundingBox::BoundingBox(const QVector3D& minimum, const QVector3D& maximum, const QVector4D& bbColor)
  2. : color(bbColor)
  3. , initialized(false)
  4. {
  5.     initialize(minimum, maximum);
  6. }
  7.  
  8. void BoundingBox::initialize(const QVector3D& minimum, const QVector3D& maximum)
  9. {
  10.     if(initialized)
  11.         return;
  12.  
  13.     initialized = true;
  14.  
  15.     min = minimum;
  16.     max = maximum;
  17.  
  18.     QVector<float> positionData(10 * 3); // 10 points * 3 vertex per point
  19.     QVector<float> positionData2(2 * 3); // 2 points * 3 vertex per point
  20.     QVector<float> positionData3(2 * 3); // 2 points * 3 vertex per point
  21.     QVector<float> positionData4(2 * 3); // 2 points * 3 vertex per point
  22.  
  23.     add(positionData, min.x(), max.y(), min.z());
  24.     add(positionData, min.x(), min.y(), min.z());
  25.     add(positionData, max.x(), min.y(), min.z());
  26.     add(positionData, max.x(), min.y(), max.z());
  27.     add(positionData, max.x(), max.y(), max.z());
  28.     add(positionData, max.x(), max.y(), min.z());
  29.     add(positionData, min.x(), max.y(), min.z());
  30.     add(positionData, min.x(), max.y(), max.z());
  31.     add(positionData, min.x(), min.y(), max.z());
  32.     add(positionData, min.x(), min.y(), min.z());
  33.  
  34.     add(positionData2, min.x(), min.y(), max.z());
  35.     add(positionData2, max.x(), min.y(), max.z());
  36.  
  37.     add(positionData3, max.x(), max.y(), min.z());
  38.     add(positionData3, max.x(), min.y(), min.z());
  39.  
  40.     add(positionData4, min.x(), max.y(), max.z());
  41.     add(positionData4, max.x(), max.y(), max.z());
  42.  
  43.     mainMesh.createVertexArrayObject();
  44.     mainMesh.createBuffer(Mesh::Vertices, positionData.data(), positionData.size() * sizeof(float));
  45.     mainMesh.setNumFaces(10);
  46.  
  47.     mesh2.createVertexArrayObject();
  48.     mesh2.createBuffer(Mesh::Vertices, positionData2.data(), positionData2.size() * sizeof(float));
  49.     mesh2.setNumFaces(2);
  50.  
  51.     mesh3.createVertexArrayObject();
  52.     mesh3.createBuffer(Mesh::Vertices, positionData3.data(), positionData3.size() * sizeof(float));
  53.     mesh3.setNumFaces(2);
  54.  
  55.     mesh4.createVertexArrayObject();
  56.     mesh4.createBuffer(Mesh::Vertices, positionData4.data(), positionData4.size() * sizeof(float));
  57.     mesh4.setNumFaces(2);
  58. }
  59.  
  60. void BoundingBox::draw(QOpenGLShaderProgram* shader, const QMatrix4x4& viewMatrix, const QMatrix4x4& projectionMatrix)
  61. {
  62.     if(min == max)
  63.         return;
  64.  
  65.     glEnable(GL_LINE_SMOOTH);
  66.     glLineWidth(3.0f);
  67.     glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
  68.  
  69.     /// Set shader
  70.     pipeline.setCamera(QMatrix4x4(), viewMatrix, projectionMatrix);
  71.     // instead of pipeline just pick up mvp from camera and set it
  72.  
  73.     updateMatrix();
  74.  
  75.     shader->bind();
  76.  
  77.     pipeline.updateMatrices(shader);
  78.  
  79.     shader->setUniformValue("color", color);
  80.  
  81.     /// Main draw
  82.     mainMesh.bind();
  83.     mainMesh.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
  84.  
  85.     //glLineWidth(25.0f);
  86.     glDrawArrays(GL_LINES, 0, mainMesh.getNumFaces());
  87.  
  88.     /// draw second line
  89.     mesh2.bind();
  90.     mesh2.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
  91.  
  92.     glDrawArrays(GL_LINE, 0, mesh2.getNumFaces());
  93.  
  94.     /// draw third line
  95.     mesh3.bind();
  96.     mesh3.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
  97.  
  98.     glDrawArrays(GL_LINE, 0, mesh3.getNumFaces());
  99.  
  100.     /// draw fourth line
  101.     mesh4.bind();
  102.     mesh4.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
  103.  
  104.     glDrawArrays(GL_LINE, 0, mesh4.getNumFaces());
  105.  
  106.     /*glPointSize(50.0f);
  107.     glDrawArrays(GL_POINTS, 0, mesh.getNumFaces());*/
  108.  
  109.     /// Set default GL
  110.     glDisable(GL_LINE_SMOOTH);
  111.     glLineWidth(1.0f);
  112. }
  113.  
  114. void BoundingBox::translate(const QVector3D& vector)
  115. {
  116.     translateVec = vector;
  117. }
  118.  
  119. void BoundingBox::scale(const QVector3D& vector)
  120. {
  121.     scaleVec = vector;
  122. }
  123.  
  124. void BoundingBox::rotation(const QVector3D& vector)
  125. {
  126.     rotationVec = vector;
  127. }
  128.  
  129. void BoundingBox::add(QVector<float>& data, const float& x, const float& y, const float& z)
  130. {
  131.     data.append(x);
  132.     data.append(y);
  133.     data.append(z);
  134. }
  135.  
  136. void BoundingBox::updateMatrix()
  137. {
  138.     // translate
  139.     pipeline.translate(translateVec.x(), translateVec.y(), translateVec.z());
  140.  
  141.     // scale
  142.     pipeline.scale(scaleVec.x(), scaleVec.y(), scaleVec.z());
  143.  
  144.     // rotation
  145.     pipeline.rotateX(rotationVec.x() * 360.0f);
  146.     pipeline.rotateY(rotationVec.y() * 360.0f);
  147.     pipeline.rotateZ(rotationVec.z() * 360.0f);
  148. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top