SHARE
TWEET
Untitled
a guest
Dec 29th, 2014
7
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- BoundingBox::BoundingBox(const QVector3D& minimum, const QVector3D& maximum, const QVector4D& bbColor)
- : color(bbColor)
- , initialized(false)
- {
- initialize(minimum, maximum);
- }
- void BoundingBox::initialize(const QVector3D& minimum, const QVector3D& maximum)
- {
- if(initialized)
- return;
- initialized = true;
- min = minimum;
- max = maximum;
- QVector<float> positionData(10 * 3); // 10 points * 3 vertex per point
- QVector<float> positionData2(2 * 3); // 2 points * 3 vertex per point
- QVector<float> positionData3(2 * 3); // 2 points * 3 vertex per point
- QVector<float> positionData4(2 * 3); // 2 points * 3 vertex per point
- add(positionData, min.x(), max.y(), min.z());
- add(positionData, min.x(), min.y(), min.z());
- add(positionData, max.x(), min.y(), min.z());
- add(positionData, max.x(), min.y(), max.z());
- add(positionData, max.x(), max.y(), max.z());
- add(positionData, max.x(), max.y(), min.z());
- add(positionData, min.x(), max.y(), min.z());
- add(positionData, min.x(), max.y(), max.z());
- add(positionData, min.x(), min.y(), max.z());
- add(positionData, min.x(), min.y(), min.z());
- add(positionData2, min.x(), min.y(), max.z());
- add(positionData2, max.x(), min.y(), max.z());
- add(positionData3, max.x(), max.y(), min.z());
- add(positionData3, max.x(), min.y(), min.z());
- add(positionData4, min.x(), max.y(), max.z());
- add(positionData4, max.x(), max.y(), max.z());
- mainMesh.createVertexArrayObject();
- mainMesh.createBuffer(Mesh::Vertices, positionData.data(), positionData.size() * sizeof(float));
- mainMesh.setNumFaces(10);
- mesh2.createVertexArrayObject();
- mesh2.createBuffer(Mesh::Vertices, positionData2.data(), positionData2.size() * sizeof(float));
- mesh2.setNumFaces(2);
- mesh3.createVertexArrayObject();
- mesh3.createBuffer(Mesh::Vertices, positionData3.data(), positionData3.size() * sizeof(float));
- mesh3.setNumFaces(2);
- mesh4.createVertexArrayObject();
- mesh4.createBuffer(Mesh::Vertices, positionData4.data(), positionData4.size() * sizeof(float));
- mesh4.setNumFaces(2);
- }
- void BoundingBox::draw(QOpenGLShaderProgram* shader, const QMatrix4x4& viewMatrix, const QMatrix4x4& projectionMatrix)
- {
- if(min == max)
- return;
- glEnable(GL_LINE_SMOOTH);
- glLineWidth(3.0f);
- glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
- /// Set shader
- pipeline.setCamera(QMatrix4x4(), viewMatrix, projectionMatrix);
- // instead of pipeline just pick up mvp from camera and set it
- updateMatrix();
- shader->bind();
- pipeline.updateMatrices(shader);
- shader->setUniformValue("color", color);
- /// Main draw
- mainMesh.bind();
- mainMesh.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
- //glLineWidth(25.0f);
- glDrawArrays(GL_LINES, 0, mainMesh.getNumFaces());
- /// draw second line
- mesh2.bind();
- mesh2.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
- glDrawArrays(GL_LINE, 0, mesh2.getNumFaces());
- /// draw third line
- mesh3.bind();
- mesh3.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
- glDrawArrays(GL_LINE, 0, mesh3.getNumFaces());
- /// draw fourth line
- mesh4.bind();
- mesh4.createAttributeArray(Mesh::Vertices, shader, "position", GL_FLOAT, 0, 3);
- glDrawArrays(GL_LINE, 0, mesh4.getNumFaces());
- /*glPointSize(50.0f);
- glDrawArrays(GL_POINTS, 0, mesh.getNumFaces());*/
- /// Set default GL
- glDisable(GL_LINE_SMOOTH);
- glLineWidth(1.0f);
- }
- void BoundingBox::translate(const QVector3D& vector)
- {
- translateVec = vector;
- }
- void BoundingBox::scale(const QVector3D& vector)
- {
- scaleVec = vector;
- }
- void BoundingBox::rotation(const QVector3D& vector)
- {
- rotationVec = vector;
- }
- void BoundingBox::add(QVector<float>& data, const float& x, const float& y, const float& z)
- {
- data.append(x);
- data.append(y);
- data.append(z);
- }
- void BoundingBox::updateMatrix()
- {
- // translate
- pipeline.translate(translateVec.x(), translateVec.y(), translateVec.z());
- // scale
- pipeline.scale(scaleVec.x(), scaleVec.y(), scaleVec.z());
- // rotation
- pipeline.rotateX(rotationVec.x() * 360.0f);
- pipeline.rotateY(rotationVec.y() * 360.0f);
- pipeline.rotateZ(rotationVec.z() * 360.0f);
- }
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.

