diff --git a/src/main.cpp b/src/main.cpp index 92ae9c1..49aaa49 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -264,6 +264,72 @@ int main(void) bulbShader.load(GL_FRAGMENT_SHADER, "shaders/bulb.frag"); bulbShader.link(); + // Вершины для скайбокса + glm::vec3 skybox_verticies[] = { + {-1.0f, 1.0f, -1.0f}, + {-1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, 1.0f, -1.0f}, + {-1.0f, 1.0f, -1.0f}, + + {-1.0f, -1.0f, 1.0f}, + {-1.0f, -1.0f, -1.0f}, + {-1.0f, 1.0f, -1.0f}, + {-1.0f, 1.0f, -1.0f}, + {-1.0f, 1.0f, 1.0f}, + {-1.0f, -1.0f, 1.0f}, + + { 1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + + {-1.0f, -1.0f, 1.0f}, + {-1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, -1.0f, 1.0f}, + {-1.0f, -1.0f, 1.0f}, + + {-1.0f, 1.0f, -1.0f}, + { 1.0f, 1.0f, -1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + {-1.0f, 1.0f, 1.0f}, + {-1.0f, 1.0f, -1.0f}, + + {-1.0f, -1.0f, -1.0f}, + {-1.0f, -1.0f, 1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + {-1.0f, -1.0f, 1.0f}, + { 1.0f, -1.0f, 1.0f} + }; + // Модель скайбокса + Model skybox; + skybox.load_verteces(skybox_verticies, sizeof(skybox_verticies)/sizeof(glm::vec3)); + TextureCube skybox_texture(TEX_DIFFUSE, { "../resources/textures/skybox/px.jpg" + , "../resources/textures/skybox/nx.jpg" + , "../resources/textures/skybox/py.jpg" + , "../resources/textures/skybox/ny.jpg" + , "../resources/textures/skybox/pz.jpg" + , "../resources/textures/skybox/nz.jpg" + }); + + // Шейдер для скайбокса + ShaderProgram skyboxShader; + // Загрузим шейдеры + skyboxShader.load(GL_VERTEX_SHADER, "shaders/skybox.vert"); + skyboxShader.load(GL_FRAGMENT_SHADER, "shaders/skybox.frag"); + skyboxShader.link(); + // Привязка текстуры скайбокса + const char* skybox_shader_names[] = {"skybox"}; + skyboxShader.bindTextures(skybox_shader_names, sizeof(skybox_shader_names)/sizeof(const char*)); + + // Пока не произойдет событие запроса закрытия окна while(!glfwWindowShouldClose(window)) { @@ -322,6 +388,17 @@ int main(void) glBlitFramebuffer(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, GL_DEPTH_BUFFER_BIT, GL_NEAREST); FBO::useDefault(); // Использование базового буфера для дальнейших работ + // Отрисовка скайбокса без записи глубины + glDepthMask(GL_FALSE); + // Используем шейдер для скайбокса + skyboxShader.use(); + // Подключаем текстуру скайбокса + skybox_texture.use(); + // Рендерим куб + skybox.render(); + // Возвращаем запись глубины + glDepthMask(GL_TRUE); + // Отрисовка отладочных лампочек со специальным шейдером bulbShader.use(); Light::render(bulbShader, material_data);