From e1a800980ded99c735dd1b590623e0ad69ad3ab0 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Sun, 8 Jan 2023 21:25:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B8=D1=81=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=BA=D0=B0=D0=B9=D0=B1=D0=BE=D0=BA=D1=81?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) 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);