added skybox
This commit is contained in:
parent
5b2349e37b
commit
ad9083330b
Binary file not shown.
Binary file not shown.
BIN
.vs/Projekt/v16/ipch/AutoPCH/bac18c0cab95d9ba/TEXTURE.ipch
Normal file
BIN
.vs/Projekt/v16/ipch/AutoPCH/bac18c0cab95d9ba/TEXTURE.ipch
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(513,5): warning MSB8028: Katalog pośredni (Debug\) zawiera pliki udostępnione z innego projektu (grk-cw6.vcxproj). Może to spowodować niepoprawne zachowanie podczas oczyszczania i ponownej kompilacji.
|
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(513,5): warning MSB8028: Katalog pośredni (Debug\) zawiera pliki udostępnione z innego projektu (grk-cw6.vcxproj). Może to spowodować niepoprawne zachowanie podczas oczyszczania i ponownej kompilacji.
|
||||||
main.cpp
|
main.cpp
|
||||||
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(72,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(120,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||||
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(73,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(121,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||||
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(181,12): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\cw 6\src\main.cpp(260,12): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
||||||
Camera.obj : warning LNK4075: zignorowano opcję „/EDITANDCONTINUE” z powodu określenia opcji „/INCREMENTAL:NO”
|
Camera.obj : warning LNK4075: zignorowano opcję „/EDITANDCONTINUE” z powodu określenia opcji „/INCREMENTAL:NO”
|
||||||
grk-cw6.vcxproj -> C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\Debug\Projekt.exe
|
grk-cw6.vcxproj -> C:\Users\lukas\Desktop\Projekt - Grafika komputerowa\Projekt\Debug\Projekt.exe
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
11
cw 6/shaders/skybox.frag
Normal file
11
cw 6/shaders/skybox.frag
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#version 330 core
|
||||||
|
out vec4 FragColor;
|
||||||
|
|
||||||
|
in vec3 texCoords;
|
||||||
|
|
||||||
|
uniform samplerCube skybox;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
FragColor = texture(skybox, texCoords);
|
||||||
|
}
|
16
cw 6/shaders/skybox.vert
Normal file
16
cw 6/shaders/skybox.vert
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#version 330 core
|
||||||
|
layout (location = 0) in vec3 aPos;
|
||||||
|
|
||||||
|
out vec3 texCoords;
|
||||||
|
|
||||||
|
uniform mat4 projection;
|
||||||
|
uniform mat4 view;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 pos = projection * view * vec4(aPos, 1.0f);
|
||||||
|
// Having z equal w will always result in a depth of 1.0f
|
||||||
|
gl_Position = vec4(pos.x, pos.y, pos.w, pos.w);
|
||||||
|
// We want to flip the z axis due to the different coordinate systems (left hand vs right hand)
|
||||||
|
texCoords = vec3(aPos.x, aPos.y, -aPos.z);
|
||||||
|
}
|
@ -10,14 +10,21 @@
|
|||||||
#include "Render_Utils.h"
|
#include "Render_Utils.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
|
#include "SOIL/SOIL.h"
|
||||||
|
|
||||||
|
|
||||||
|
float width = 600;
|
||||||
|
float height = 600;
|
||||||
|
|
||||||
GLuint programColor;
|
GLuint programColor;
|
||||||
GLuint programTexture;
|
GLuint programTexture;
|
||||||
|
GLuint programSkybox;
|
||||||
|
|
||||||
Core::Shader_Loader shaderLoader;
|
Core::Shader_Loader shaderLoader;
|
||||||
|
|
||||||
Core::RenderContext shipContext;
|
Core::RenderContext shipContext;
|
||||||
Core::RenderContext sphereContext;
|
Core::RenderContext fishContext;
|
||||||
|
Core::RenderContext skyboxContext;
|
||||||
|
|
||||||
glm::vec3 cameraPos = glm::vec3(0, 0, 5);
|
glm::vec3 cameraPos = glm::vec3(0, 0, 5);
|
||||||
glm::vec3 cameraDir; // Wektor "do przodu" kamery
|
glm::vec3 cameraDir; // Wektor "do przodu" kamery
|
||||||
@ -30,9 +37,9 @@ glm::vec3 lightDir = glm::normalize(glm::vec3(1.0f, -0.9f, 1.0f));
|
|||||||
|
|
||||||
glm::quat rotation = glm::quat(1, 0, 0, 0);
|
glm::quat rotation = glm::quat(1, 0, 0, 0);
|
||||||
|
|
||||||
GLuint textureAsteroid;
|
GLuint textureFish;
|
||||||
|
|
||||||
glm::vec3 planetLocation[10];
|
glm::vec3 fishLocation[10];
|
||||||
|
|
||||||
float mouseXPosition;
|
float mouseXPosition;
|
||||||
float mouseYPosition;
|
float mouseYPosition;
|
||||||
@ -46,6 +53,47 @@ glm::quat rotation_x;
|
|||||||
float dy = 0;
|
float dy = 0;
|
||||||
float dx = 0;
|
float dx = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// SKYBOX
|
||||||
|
unsigned int skyboxVAO, skyboxVBO, skyboxEBO;
|
||||||
|
unsigned int cubemapTexture;
|
||||||
|
|
||||||
|
float skyboxVertices[] =
|
||||||
|
{
|
||||||
|
// Coordinates
|
||||||
|
-1.0f, -1.0f, 1.0f,// 7--------6
|
||||||
|
1.0f, -1.0f, 1.0f,// /| /|
|
||||||
|
1.0f, -1.0f, -1.0f,// 4--------5 |
|
||||||
|
-1.0f, -1.0f, -1.0f,// | | | |
|
||||||
|
-1.0f, 1.0f, 1.0f,// | 3------|-2
|
||||||
|
1.0f, 1.0f, 1.0f,// |/ |/
|
||||||
|
1.0f, 1.0f, -1.0f,// 0--------1
|
||||||
|
-1.0f, 1.0f, -1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned int skyboxIndices[] =
|
||||||
|
{
|
||||||
|
// Right
|
||||||
|
1, 2, 6,
|
||||||
|
6, 5, 1,
|
||||||
|
// Left
|
||||||
|
0, 4, 7,
|
||||||
|
7, 3, 0,
|
||||||
|
// Top
|
||||||
|
4, 5, 6,
|
||||||
|
6, 7, 4,
|
||||||
|
// Bottom
|
||||||
|
0, 3, 2,
|
||||||
|
2, 1, 0,
|
||||||
|
// Back
|
||||||
|
0, 1, 5,
|
||||||
|
5, 4, 0,
|
||||||
|
// Front
|
||||||
|
3, 7, 6,
|
||||||
|
6, 2, 3
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void keyboard(unsigned char key, int x, int y)
|
void keyboard(unsigned char key, int x, int y)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -80,7 +128,7 @@ glm::mat4 createCameraMatrix()
|
|||||||
|
|
||||||
dy += delta_y;
|
dy += delta_y;
|
||||||
dx += delta_x;
|
dx += delta_x;
|
||||||
printf("%f", delta_y);
|
//printf("%f", delta_y);
|
||||||
delta_x = 0;
|
delta_x = 0;
|
||||||
delta_y = 0;
|
delta_y = 0;
|
||||||
|
|
||||||
@ -134,6 +182,36 @@ void drawObjectTexture(Core::RenderContext context, glm::mat4 modelMatrix, GLuin
|
|||||||
|
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drawObjectSkybox(Core::RenderContext context)
|
||||||
|
{
|
||||||
|
glUseProgram(programSkybox);
|
||||||
|
|
||||||
|
glUniform1i(glGetUniformLocation(programSkybox, "skybox"), 0);
|
||||||
|
|
||||||
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
|
||||||
|
glm::mat4 view = glm::mat4(1.0f);
|
||||||
|
glm::mat4 projection = glm::mat4(1.0f);
|
||||||
|
// We make the mat4 into a mat3 and then a mat4 again in order to get rid of the last row and column
|
||||||
|
// The last row and column affect the translation of the skybox (which we don't want to affect)
|
||||||
|
view = glm::mat4(glm::mat3(glm::lookAt(cameraPos, cameraPos + cameraDir, glm::vec3(0, 1, 0))));
|
||||||
|
projection = glm::perspective(glm::radians(45.0f), (float)width / height, 0.1f, 100.0f);
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(programSkybox, "view"), 1, GL_FALSE, glm::value_ptr(view));
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(programSkybox, "projection"), 1, GL_FALSE, glm::value_ptr(projection));
|
||||||
|
|
||||||
|
// Draws the cubemap as the last object so we can save a bit of performance by discarding all fragments
|
||||||
|
// where an object is present (a depth of 1.0f will always fail against any object's depth value)
|
||||||
|
glBindVertexArray(skyboxVAO);
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);
|
||||||
|
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
// Switch back to the normal depth function
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
}
|
||||||
|
|
||||||
void renderScene()
|
void renderScene()
|
||||||
{
|
{
|
||||||
// Aktualizacja macierzy widoku i rzutowania
|
// Aktualizacja macierzy widoku i rzutowania
|
||||||
@ -149,15 +227,16 @@ void renderScene()
|
|||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
glm::mat4 fishInitialTransformation = glm::translate(planetLocation[i]) * glm::rotate(glm::radians(180.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.01f));
|
glm::mat4 fishInitialTransformation = glm::translate(fishLocation[i]) * glm::rotate(glm::radians(180.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.005f));
|
||||||
drawObjectTexture(sphereContext, fishInitialTransformation, textureAsteroid);
|
drawObjectTexture(fishContext, fishInitialTransformation, textureFish);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawObjectSkybox(skyboxContext);
|
||||||
|
|
||||||
glutSwapBuffers();
|
glutSwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void loadModelToContext(std::string path, Core::RenderContext& context)
|
void loadModelToContext(std::string path, Core::RenderContext& context)
|
||||||
{
|
{
|
||||||
Assimp::Importer import;
|
Assimp::Importer import;
|
||||||
@ -175,22 +254,94 @@ void init()
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
planetLocation[i] = glm::ballRand(20.0);
|
fishLocation[i] = glm::ballRand(20.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
srand(time(0));
|
srand(time(0));
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
programColor = shaderLoader.CreateProgram("shaders/shader_color.vert", "shaders/shader_color.frag");
|
programColor = shaderLoader.CreateProgram("shaders/shader_color.vert", "shaders/shader_color.frag");
|
||||||
programTexture = shaderLoader.CreateProgram("shaders/shader_tex.vert", "shaders/shader_tex.frag");
|
programTexture = shaderLoader.CreateProgram("shaders/shader_tex.vert", "shaders/shader_tex.frag");
|
||||||
|
programSkybox = shaderLoader.CreateProgram("shaders/skybox.vert", "shaders/skybox.frag");
|
||||||
loadModelToContext("models/spaceship.obj", shipContext);
|
loadModelToContext("models/spaceship.obj", shipContext);
|
||||||
loadModelToContext("models/TropicalFish01.obj", sphereContext);
|
loadModelToContext("models/TropicalFish01.obj", fishContext);
|
||||||
textureAsteroid = Core::LoadTexture("textures/TropicalFish01.jpg");
|
textureFish = Core::LoadTexture("textures/TropicalFish01.jpg");
|
||||||
|
|
||||||
|
// SKYBOX
|
||||||
|
// Create VAO, VBO, and EBO for the skybox
|
||||||
|
|
||||||
|
glGenVertexArrays(1, &skyboxVAO);
|
||||||
|
glGenBuffers(1, &skyboxVBO);
|
||||||
|
glGenBuffers(1, &skyboxEBO);
|
||||||
|
glBindVertexArray(skyboxVAO);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, skyboxVBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(skyboxVertices), &skyboxVertices, GL_STATIC_DRAW);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, skyboxEBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(skyboxIndices), &skyboxIndices, GL_STATIC_DRAW);
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
// All the faces of the cubemap (make sure they are in this exact order)
|
||||||
|
std::string facesCubemap[6] =
|
||||||
|
{
|
||||||
|
"textures/skybox/uw_rt.jpg",
|
||||||
|
"textures/skybox/uw_lf.jpg",
|
||||||
|
"textures/skybox/uw_up.jpg",
|
||||||
|
"textures/skybox/uw_dn.jpg",
|
||||||
|
"textures/skybox/uw_bk.jpg",
|
||||||
|
"textures/skybox/uw_ft.jpg"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Creates the cubemap texture object
|
||||||
|
|
||||||
|
glGenTextures(1, &cubemapTexture);
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
// These are very important to prevent seams
|
||||||
|
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);
|
||||||
|
// This might help with seams on some systems
|
||||||
|
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
|
||||||
|
|
||||||
|
// Cycles through all the textures and attaches them to the cubemap object
|
||||||
|
for (unsigned int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
int width, height, nrChannels;
|
||||||
|
unsigned char* data = SOIL_load_image(facesCubemap[i].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
|
||||||
|
);
|
||||||
|
SOIL_free_image_data(data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Failed to load texture: " << facesCubemap[i] << std::endl;
|
||||||
|
SOIL_free_image_data(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown()
|
void shutdown()
|
||||||
{
|
{
|
||||||
shaderLoader.DeleteProgram(programColor);
|
shaderLoader.DeleteProgram(programColor);
|
||||||
shaderLoader.DeleteProgram(programTexture);
|
shaderLoader.DeleteProgram(programTexture);
|
||||||
|
shaderLoader.DeleteProgram(programSkybox);
|
||||||
}
|
}
|
||||||
|
|
||||||
void idle()
|
void idle()
|
||||||
@ -214,6 +365,7 @@ int main(int argc, char** argv)
|
|||||||
glutDisplayFunc(renderScene);
|
glutDisplayFunc(renderScene);
|
||||||
glutIdleFunc(idle);
|
glutIdleFunc(idle);
|
||||||
|
|
||||||
|
|
||||||
glutMainLoop();
|
glutMainLoop();
|
||||||
|
|
||||||
shutdown();
|
shutdown();
|
||||||
|
BIN
cw 6/textures/skybox/uw_bk.jpg
Normal file
BIN
cw 6/textures/skybox/uw_bk.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 445 KiB |
BIN
cw 6/textures/skybox/uw_dn.jpg
Normal file
BIN
cw 6/textures/skybox/uw_dn.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 433 KiB |
BIN
cw 6/textures/skybox/uw_ft.jpg
Normal file
BIN
cw 6/textures/skybox/uw_ft.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 390 KiB |
BIN
cw 6/textures/skybox/uw_lf.jpg
Normal file
BIN
cw 6/textures/skybox/uw_lf.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 387 KiB |
BIN
cw 6/textures/skybox/uw_rt.jpg
Normal file
BIN
cw 6/textures/skybox/uw_rt.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 366 KiB |
BIN
cw 6/textures/skybox/uw_up.jpg
Normal file
BIN
cw 6/textures/skybox/uw_up.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 292 KiB |
7762
dependencies/stb/stb_image.h
vendored
Normal file
7762
dependencies/stb/stb_image.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user