summaryrefslogtreecommitdiff
path: root/engine-ocean/Game/Environment/skyboxenvironment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine-ocean/Game/Environment/skyboxenvironment.cpp')
-rw-r--r--engine-ocean/Game/Environment/skyboxenvironment.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/engine-ocean/Game/Environment/skyboxenvironment.cpp b/engine-ocean/Game/Environment/skyboxenvironment.cpp
new file mode 100644
index 0000000..f0ad41f
--- /dev/null
+++ b/engine-ocean/Game/Environment/skyboxenvironment.cpp
@@ -0,0 +1,64 @@
+#include "skyboxenvironment.h"
+#include "Graphics/global.h"
+
+
+SkyboxEnvironment::SkyboxEnvironment(std::shared_ptr<Camera> camera):
+ m_camera(camera),
+ m_rotation_mat(std::make_shared<ModelTransform>())
+{
+ initializeVAO();
+}
+
+void SkyboxEnvironment::initializeVAO(){
+ skybox_tex = Global::graphics.loadCubeMap(m_skyboxTextureFiles);
+
+ glGenVertexArrays(1, &VAO);
+ glGenBuffers(1, &VBO);
+ glBindVertexArray(VAO);
+
+ glBindBuffer(GL_ARRAY_BUFFER, VBO);
+ glBufferData(GL_ARRAY_BUFFER, m_vertices.size()*sizeof(float), m_vertices.data(), GL_STATIC_DRAW);
+
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (void*)0);
+
+ // unbind
+ glEnableVertexAttribArray(0);
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+}
+
+
+void SkyboxEnvironment::draw(){
+ glDepthFunc(GL_LEQUAL);
+ glDisable(GL_CULL_FACE);
+
+ Global::graphics.bindShader("skybox");
+ //Global::graphics.setCameraData(m_camera);
+
+ // activate texture
+ glActiveTexture(GL_TEXTURE3);
+ glBindTexture(GL_TEXTURE_CUBE_MAP, skybox_tex);
+
+ // manually set view and projection, for non-translating view
+ glm::mat4 projection = m_camera->getProjection();
+ glm::mat4 view = m_camera->getView();
+ view[3] = glm::vec4(0.f);
+
+ glUniformMatrix4fv(glGetUniformLocation(Global::graphics.getShaderID("skybox"), "view"), 1, GL_FALSE, glm::value_ptr(view[0]));
+ glUniformMatrix4fv(glGetUniformLocation(Global::graphics.getShaderID("skybox"), "projection"), 1, GL_FALSE, glm::value_ptr(projection[0]));
+
+ // apply rotation matrix
+ glUniformMatrix4fv(glGetUniformLocation(Global::graphics.getShaderID("skybox"), "rotation"), 1, GL_FALSE, glm::value_ptr(m_rotation_mat->getRotation()[0]));
+
+ //Global::graphics.setGlobalData(glm::vec3(.5f));
+ glBindVertexArray(VAO);
+ glDrawArrays(GL_TRIANGLES, 0, m_vertices.size());
+
+ glDepthFunc(GL_LESS);
+}
+
+void SkyboxEnvironment::update(double deltaTime){
+ m_rotation += ROTATE_SPEED * deltaTime;
+ m_rotation_mat->rotate(glm::radians(ROTATE_SPEED), glm::vec3(0.f, 1.f, 0.f));
+
+
+}