Advertisement
Guest User

Untitled

a guest
May 19th, 2019
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. #include "Skybox.h"
  2. #include <cmath>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <QMessageBox>
  6. #include "Model.h"
  7.  
  8. using namespace std;
  9.  
  10. Skybox::Skybox() {
  11.  
  12. // the position buffer
  13. positionBuffer = QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
  14. positionBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw);
  15. positionBuffer.create();
  16. positionBuffer.bind();
  17. positionBuffer.allocate(&positions[0],
  18. positions.size() * sizeof(QVector3D));
  19. positionBuffer.release();
  20.  
  21. // An dieser Stelle wird wieder die nullte Texturebene genutzt.
  22. //glActiveTexture(GL_TEXTURE0);
  23.  
  24. skyImages.resize(6);
  25.  
  26. skyImages[0] = std::unique_ptr<QImage>(new QImage(
  27. QString("skybox/right.png")));
  28. skyImages[1] =
  29. std::unique_ptr<QImage>(new QImage(QString("skybox/back.png")));
  30. skyImages[2] = std::unique_ptr<QImage>(
  31. new QImage(QString("skybox/down.png")));
  32. skyImages[3] = std::unique_ptr<QImage>(new QImage(
  33. QString("skybox/front.png")));
  34. skyImages[4] = std::unique_ptr<QImage>(
  35. new QImage(QString("skybox/left.png")));
  36. skyImages[5] = std::unique_ptr<QImage>(new QImage(QString("skybox/up.png")));
  37.  
  38. texture = std::make_shared<QOpenGLTexture>(QOpenGLTexture::TargetCubeMap);
  39. texture->create();
  40. texture->setSize(skyImages[0]->width(), skyImages[0]->height(), skyImages[0]->depth());
  41. texture->setFormat(QOpenGLTexture::RGBA8U);
  42. texture->allocateStorage();
  43.  
  44.  
  45.  
  46. for (size_t i = 0; i < faces.size(); i++) {
  47. texture->setData(0, 0, faces[i], QOpenGLTexture::RGBA, QOpenGLTexture::UInt8, skyImages[i]->constBits());
  48. }
  49.  
  50. texture->setWrapMode(QOpenGLTexture::ClampToEdge);
  51. texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
  52. texture->setMagnificationFilter(QOpenGLTexture::LinearMipMapLinear);
  53. texture->generateMipMaps();
  54.  
  55. }
  56.  
  57. void Skybox::render(std::shared_ptr<QOpenGLShaderProgram> program, QVector3D cameraPosition) {
  58.  
  59. int positionAttributeID = program->attributeLocation("position");
  60. program->enableAttributeArray(positionAttributeID);
  61.  
  62. positionBuffer = QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
  63. positionBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw);
  64. positionBuffer.create();
  65. positionBuffer.bind();
  66. positionBuffer.allocate(positions.data(), positions.size() * sizeof(QVector3D));
  67.  
  68. //positionBuffer.bind();
  69. program->setAttributeBuffer(positionAttributeID, GL_FLOAT, 0, 3);
  70. positionBuffer.release();
  71.  
  72. //glDrawArrays(GL_TRIANGLES, 0, 3);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement