diff options
Diffstat (limited to 'src/glwidget.cpp')
-rwxr-xr-x | src/glwidget.cpp | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/src/glwidget.cpp b/src/glwidget.cpp index c3c525b..f9bedc9 100755 --- a/src/glwidget.cpp +++ b/src/glwidget.cpp @@ -50,12 +50,20 @@ GLWidget::GLWidget(QWidget *parent) : // Function tick() will be called once per interva connect(&m_intervalTimer, SIGNAL(timeout()), this, SLOT(tick())); + + //m_skybox = new skybox(); } GLWidget::~GLWidget() { if (m_defaultShader != nullptr) delete m_defaultShader; if (m_pointShader != nullptr) delete m_pointShader; + if (m_foamShader != nullptr) delete m_foamShader; + + if (m_skyboxShader != nullptr) delete m_skyboxShader; + //if (m_skybox != nullptr) delete m_skybox; + + } // ================== Basic OpenGL Overrides @@ -70,8 +78,12 @@ void GLWidget::initializeGL() // Set clear color to white glClearColor(0, 0, 0, 1); +// glEnable(GL_DEPTH_TEST); +// glEnable(GL_CULL_FACE); +// glEnable(GL_BLEND); +// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Enable depth-testing and backface culling +// // Enable depth-testing and backface culling glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); @@ -84,6 +96,15 @@ void GLWidget::initializeGL() // m_texture_shader = new Shader(":/resources/shaders/texture.vert", ":/resources/shaders/texture.frag"); m_colorShader = new Shader(":resources/shaders/color.vert", ":resources/shaders/color.frag"); m_foamShader = new Shader(":resources/shaders/foam.vert", ":resources/shaders/foam.frag"); + m_skyboxShader = new Shader(":resources/shaders/skybox.vert", ":resources/shaders/skybox.frag"); + + // specify texture for skybox +// m_skyboxShader->bind(); +// glUniform1i(glGetUniformLocation(m_skyboxShader->id(), "cubeMap"), 9); // bind texture at slot 9 +// Eigen::Vector3f sc = Eigen::Vector3f(.77f, .85f, .99f); // skycolor for fade effect +// glUniform3f(glGetUniformLocation(m_skyboxShader->id(), "skyColor"), sc[0], sc[1], sc[2]); +// m_skyboxShader->unbind(); + m_halftone_tex = loadTextureFromFile("/Users/jesswan/Desktop/cs2240/ocean-simulation/resources/images/halftone.png").textureID; m_foam_tex = loadTextureFromFile("/Users/jesswan/Desktop/cs2240/ocean-simulation/resources/images/foam3.png").textureID; @@ -91,6 +112,10 @@ void GLWidget::initializeGL() initCaustics(); + + // init skybox stuff + m_skybox.initializeVAO(); + // INITIALIZE TEXTURE STUFF // Prepare filepath @@ -171,6 +196,9 @@ void GLWidget::initializeGL() m_camera.lookAt(eye, target); m_camera.setOrbitPoint(target); m_camera.setPerspective(120, width() / static_cast<float>(height()), nearPlane, farPlane); + m_camera.setPosition(Eigen::Vector3f( 0, + 0, + -70289.5)); m_deltaTimeProvider.start(); m_intervalTimer.start(1000 / 60); @@ -371,6 +399,13 @@ void GLWidget::paintGL() m_arap.drawFoam(m_foamShader, GL_TRIANGLES); m_foamShader->unbind(); + // skybox + + + + m_skybox.draw(m_skyboxShader, m_camera); + + } @@ -420,6 +455,48 @@ TextureData GLWidget::loadTextureFromFile(const char *path) return newtex; } +GLuint GLWidget::loadCubeMap(std::vector<const char*> textureFiles){ + std::cout << "hello 111" << std::endl; + + // create empty texture + GLuint textureID; + glGenTextures(1, &textureID); + + std::cout << "hello fssd" << std::endl; + + + //glActiveTexture(GL_TEXTURE3); + glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); + + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + + std::cout << "hello fssd" << std::endl; + + GLuint target = GL_TEXTURE_CUBE_MAP_POSITIVE_X; + for (int i=0; i<6; i++){ + std::string filename = std::string(textureFiles[i]);//directory + '/' + filename; + int width, height, nrChannels; + unsigned char* data = stbi_load(filename.c_str(), &width, &height, &nrChannels, 0); + + if (data){ + stbi_set_flip_vertically_on_load(false); + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); + stbi_image_free(data); + + } else { + std::cout << "Texture failed to load at path: " << textureFiles[i] << std::endl; + stbi_image_free(data); + } + } + + return textureID; +} + + void GLWidget::resizeGL(int w, int h) { @@ -581,6 +658,8 @@ void GLWidget::tick() { float deltaSeconds = m_deltaTimeProvider.restart() / 1000.f; m_arap.update(deltaSeconds); + // rotate skybox + m_skybox.update(deltaSeconds); // Move camera auto look = m_camera.getLook(); @@ -592,6 +671,7 @@ void GLWidget::tick() moveVec *= deltaSeconds; m_camera.move(moveVec); + // Flag this view for repainting (Qt will call paintGL() soon after) update(); } |