summaryrefslogtreecommitdiff
path: root/src/glwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/glwidget.cpp')
-rwxr-xr-xsrc/glwidget.cpp82
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();
}