|
|
|
@ -433,15 +433,15 @@ class SDLGLGLWindow {
@@ -433,15 +433,15 @@ class SDLGLGLWindow {
|
|
|
|
|
//Success flag
|
|
|
|
|
bool success = true; |
|
|
|
|
//Generate program
|
|
|
|
|
shader = new Shader("data/shaders/instanced.vert", "data/shaders/test.frag"); |
|
|
|
|
modelShader = new Shader("data/shaders/instanced.vert", "data/shaders/test.frag"); |
|
|
|
|
shader = new Shader("data/shaders/test.vert", "data/shaders/test.frag"); |
|
|
|
|
modelShader = new Shader("data/shaders/test.vert", "data/shaders/test.frag"); |
|
|
|
|
texShader = new Shader("data/shaders/screentexture.vert", "data/shaders/screentexture.frag"); |
|
|
|
|
skyboxShader = new Shader("data/shaders/sky.vert", "data/shaders/sky.frag"); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
objects = new simple_object_draw_system(shader); |
|
|
|
|
|
|
|
|
|
modelShader->use(); |
|
|
|
|
//modelShader->use();
|
|
|
|
|
stbi_set_flip_vertically_on_load(true); |
|
|
|
|
objects->add(Model(fmt::format("{}/backpack/backpack.obj", OBJ_DIR)), {0,0,0}, glm::mat4(1.0)); |
|
|
|
|
|
|
|
|
@ -451,18 +451,15 @@ class SDLGLGLWindow {
@@ -451,18 +451,15 @@ class SDLGLGLWindow {
|
|
|
|
|
//Link program
|
|
|
|
|
stbi_set_flip_vertically_on_load(true); |
|
|
|
|
|
|
|
|
|
modelShader->use(); |
|
|
|
|
//modelShader->use();
|
|
|
|
|
bp_model = new Model(fmt::format("{}/backpack/backpack.obj", OBJ_DIR)); |
|
|
|
|
glCheckError(); |
|
|
|
|
shader->use(); |
|
|
|
|
//shader->use();
|
|
|
|
|
|
|
|
|
|
view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f)); |
|
|
|
|
projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* generate a framebuffer to draw to
|
|
|
|
|
glGenFramebuffers(1, &framebuffer); |
|
|
|
|
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); |
|
|
|
@ -532,7 +529,7 @@ class SDLGLGLWindow {
@@ -532,7 +529,7 @@ class SDLGLGLWindow {
|
|
|
|
|
std::default_random_engine generator; |
|
|
|
|
std::uniform_real_distribution<float> distribution(-50,50); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 1000; i ++) { |
|
|
|
|
for (int i = 0; i < 10; i ++) { |
|
|
|
|
float x = distribution(generator) ; |
|
|
|
|
float y = distribution(generator) ; |
|
|
|
|
float z = distribution(generator) ; |
|
|
|
@ -540,7 +537,7 @@ class SDLGLGLWindow {
@@ -540,7 +537,7 @@ class SDLGLGLWindow {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
glCheckError(); |
|
|
|
|
shader->use(); |
|
|
|
|
//shader->use();
|
|
|
|
|
|
|
|
|
|
glGenBuffers(1, &instance_VBO); |
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, instance_VBO); |
|
|
|
@ -548,8 +545,6 @@ class SDLGLGLWindow {
@@ -548,8 +545,6 @@ class SDLGLGLWindow {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
glCheckError(); |
|
|
|
|
glCheckError(); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -599,7 +594,6 @@ class SDLGLGLWindow {
@@ -599,7 +594,6 @@ class SDLGLGLWindow {
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, texture[0]); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
shader->use(); |
|
|
|
|
shader->setInt("material.texture_diffuse1", 0); |
|
|
|
|
|
|
|
|
|
glActiveTexture(GL_TEXTURE0 + 1); |
|
|
|
@ -687,7 +681,6 @@ class SDLGLGLWindow {
@@ -687,7 +681,6 @@ class SDLGLGLWindow {
|
|
|
|
|
|
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, gVBO); |
|
|
|
|
glBufferData( GL_ARRAY_BUFFER, sizeof cubeVertices, cubeVertices, GL_STATIC_DRAW ); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
@ -715,12 +708,12 @@ class SDLGLGLWindow {
@@ -715,12 +708,12 @@ class SDLGLGLWindow {
|
|
|
|
|
/********** CUBEMAPS ***************/ |
|
|
|
|
|
|
|
|
|
std::vector<std::string> faces { |
|
|
|
|
fmt::format("{}/skybox/right.jpg", SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/skybox/left.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/skybox/top.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/skybox/bottom.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/skybox/front.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/skybox/back.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/right.jpg", SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/left.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/top.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/bottom.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/front.jpg",SKYBOX_DIR), |
|
|
|
|
fmt::format("{}/sky/back.jpg",SKYBOX_DIR), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
stbi_set_flip_vertically_on_load(false); |
|
|
|
@ -941,65 +934,6 @@ class SDLGLGLWindow {
@@ -941,65 +934,6 @@ class SDLGLGLWindow {
|
|
|
|
|
glDrawArraysInstanced(GL_TRIANGLES, 0,36,1000); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
std::map<float, glm::vec3> sorted; |
|
|
|
|
|
|
|
|
|
glCheckError(); |
|
|
|
|
for (auto pos: cubePositions) { |
|
|
|
|
float dist = glm::length(camera_pos - pos); |
|
|
|
|
sorted[dist] = pos; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
|
shader->use(); |
|
|
|
|
for(auto it = sorted.rbegin(); it != sorted.rend(); ++it) { |
|
|
|
|
|
|
|
|
|
model = glm::mat4(1.0f); |
|
|
|
|
|
|
|
|
|
model = glm::translate(model, it->second); |
|
|
|
|
// model = glm::rotate(model, glm::radians( i * 20.0f + 160.0f *(float)SDL_GetTicks() / 1000.0f), glm::vec3(0.6, 0.3, 1.0));
|
|
|
|
|
|
|
|
|
|
unsigned int loc = shader->get_uniform("model"); |
|
|
|
|
glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(model)); |
|
|
|
|
|
|
|
|
|
loc = shader->get_uniform("view"); |
|
|
|
|
glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(view)); |
|
|
|
|
|
|
|
|
|
loc = shader->get_uniform("projection");
|
|
|
|
|
glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(projection)); |
|
|
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap); |
|
|
|
|
glCheckError(); |
|
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 36); |
|
|
|
|
glCheckError(); |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
glBindVertexArray(lightVAO); |
|
|
|
|
shader->setBool("lighting_emit", true); |
|
|
|
|
|
|
|
|
|
for (glm::vec3 pos : lightPositions) { |
|
|
|
|
model = glm::mat4(1.0f); |
|
|
|
|
model = glm::translate(model, pos); |
|
|
|
|
model = glm::scale(model, glm::vec3(0.2f)); |
|
|
|
|
|
|
|
|
|
unsigned int loc = glGetUniformLocation(gProgramID, "model"); |
|
|
|
|
glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(model)); |
|
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 36); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Disable vertex position
|
|
|
|
|
//glDisableVertexAttribArray( gVertexPos2DLocation );
|
|
|
|
|
|
|
|
|
|
//Unbind program
|
|
|
|
|
//
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** draw skybox cubemap */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1020,7 +954,6 @@ class SDLGLGLWindow {
@@ -1020,7 +954,6 @@ class SDLGLGLWindow {
|
|
|
|
|
|
|
|
|
|
glBindVertexArray(gVAO); |
|
|
|
|
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap); |
|
|
|
|
glCheckError(); |
|
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 36); |
|
|
|
|
glCheckError(); |
|
|
|
|
|
|
|
|
@ -1135,6 +1068,14 @@ int main(int argc, char **argv) {
@@ -1135,6 +1068,14 @@ int main(int argc, char **argv) {
|
|
|
|
|
case SDL_SCANCODE_D: |
|
|
|
|
cont.camera_pos += camera_speed * glm::cross(cont.camera_front, cont.camera_up); |
|
|
|
|
break; |
|
|
|
|
case SDL_SCANCODE_R: |
|
|
|
|
cont.shader->reload(); |
|
|
|
|
cont.modelShader->reload(); |
|
|
|
|
glCheckError(); |
|
|
|
|
glCheckError(); |
|
|
|
|
//cont.texShader->reload();
|
|
|
|
|
//cont.skyboxShader->reload();
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} if (e.type == SDL_MOUSEMOTION) { |
|
|
|
|
|
|
|
|
|