TP3 + classe Skybox

This commit is contained in:
Marc-Eric Martel
2021-10-12 15:58:54 -04:00
parent 6f3dd99ab7
commit 167548dfc2
9 changed files with 135 additions and 89 deletions

View File

@@ -11,8 +11,7 @@ Engine::~Engine() { }
void Engine::Init()
{
GLenum glewErr = glewInit();
if (glewErr != GLEW_OK)
{
if (glewErr != GLEW_OK) {
std::cerr << " ERREUR GLEW : " << glewGetErrorString(glewErr) << std::endl;
abort();
}
@@ -29,6 +28,8 @@ void Engine::Init()
glEnable(GL_LIGHTING);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Light
GLfloat light0Pos[4] = { 0.0f, CHUNK_SIZE_Y, 0.0f, 1.0f };
@@ -42,16 +43,8 @@ void Engine::Init()
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0Diff);
glLightfv(GL_LIGHT0, GL_SPECULAR, light0Spec);
// Lumi<EFBFBD>re de Skybox.
GLfloat light1Amb[4] = { 1.5f, 1.5f, 1.5f, 1.5f };
GLfloat light1Diff[4] = { 1.f, 1.f, 1.f, 1.f };
GLfloat light1Emi[4] = { 2.f, 2.f, 2.f, 2.f };
glLightfv(GL_LIGHT1, GL_AMBIENT, light1Amb);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1Diff);
glLightfv(GL_LIGHT1, GL_EMISSION, light1Emi);
// Blend
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Objet de skybox avec sa propre texture et son propre shader!
m_skybox.Init(0.00013f);
// Init testChunk
for (int x = 0; x < CHUNK_SIZE_X; ++x) {
@@ -71,23 +64,25 @@ void Engine::DeInit() { }
void Engine::LoadResource() {
LoadTexture(m_textureFloor, TEXTURE_PATH "grass.png");
LoadTexture(m_textureSkybox, TEXTURE_PATH "skybox.png");
LoadTexture(m_skybox.GetTexture(), TEXTURE_PATH "skybox.png");
LoadTexture(m_textureCube1, TEXTURE_PATH "metal1.png");
LoadTexture(m_textureCube2, TEXTURE_PATH "metal2.png");
LoadTexture(m_textureCube3, TEXTURE_PATH "metal3.png");
LoadTexture(m_textureCube4, TEXTURE_PATH "metal4.png");
std::cout << " Loading and compiling shaders ..." << std::endl;
if (!m_shader01.Load(SHADER_PATH "shader01.vert", SHADER_PATH "shader01.frag", true))
{
if (!m_shader01.Load(SHADER_PATH "shader01.vert", SHADER_PATH "shader01.frag", true)) {
std::cout << " Failed to load shader " << std::endl;
exit(1);
}
if (!m_skybox.GetShader().Load(SHADER_PATH "skybox.vert", SHADER_PATH "skybox.frag", true)) {
std::cout << " Failed to load shader " << std::endl;
exit(1);
}
}
void Engine::UnloadResource()
{
}
void Engine::UnloadResource(){}
void Engine::Render(float elapsedTime)
{
@@ -108,77 +103,13 @@ void Engine::Render(float elapsedTime)
m_player.ApplyTransformation(all);
m_player.ApplyTransformation(skybox, false); // Version d'ApplyTransformation qui ne tient compte que de la rotation
// (donc l'objet ne bouge pas relativement au joueur, ce qui est pratique pour une skybox!).
// Skybox
skybox.Use();
m_textureSkybox.Bind();
glDisable(GL_DEPTH_TEST); // Pour que tout ce qui est dessin<69> apr<70>s soit dessin<69> par-dessus la skybox.
glDisable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glBegin(GL_QUADS);
glTexCoord2f(0, .5f);
glVertex3f(5.f, -5.f, 5.f);
glTexCoord2f(.25f, .5f);
glVertex3f(-5.f, -5.f, 5.f);
glTexCoord2f(.25f, .75f);
glVertex3f(-5.f, 5.f, 5.f);
glTexCoord2f(0, .75f);
glVertex3f(5.f, 5.f, 5.f);
glTexCoord2f(.25f, .5f);
glVertex3f(-5.f, -5.f, 5.f);
glTexCoord2f(.50f, .5f);
glVertex3f(-5.f, -5.f, -5.f);
glTexCoord2f(.50f, .75f);
glVertex3f(-5.f, 5.f, -5.f);
glTexCoord2f(.25f, .75f);
glVertex3f(-5.f, 5.f, 5.f);
glTexCoord2f(.50f, .5f);
glVertex3f(-5.f, -5.f, -5.f);
glTexCoord2f(.75f, .5f);
glVertex3f(5.f, -5.f, -5.f);
glTexCoord2f(.75f, .75f);
glVertex3f(5.f, 5.f, -5.f);
glTexCoord2f(.50f, .75f);
glVertex3f(-5.f, 5.f, -5.f);
glTexCoord2f(.75f, .5f);
glVertex3f(5.f, -5.f, -5.f);
glTexCoord2f(1, .5f);
glVertex3f(5.f, -5.f, 5.f);
glTexCoord2f(1, .75f);
glVertex3f(5.f, 5.f, 5.f);
glTexCoord2f(.75f, .75f);
glVertex3f(5.f, 5.f, -5.f);
glTexCoord2f(.25f, 1);
glVertex3f(5.f, 5.f, -5.f);
glTexCoord2f(.50f, 1);
glVertex3f(5.f, 5.f, 5.f);
glTexCoord2f(.50f, .75f);
glVertex3f(-5.f, 5.f, 5.f);
glTexCoord2f(.25f, .75f);
glVertex3f(-5.f, 5.f, -5.f);
glTexCoord2f(.50f, .25f);
glVertex3f(-5.f, -5.f, 5.f);
glTexCoord2f(.75f, .25f);
glVertex3f(5.f, -5.f, 5.f);
glTexCoord2f(.75f, .5f);
glVertex3f(5.f, -5.f, -5.f);
glTexCoord2f(.50f, .5f);
glVertex3f(-5.f, -5.f, -5.f);
glEnd();
glEnable(GL_DEPTH_TEST);
glDisable(GL_LIGHT1);
glEnable(GL_LIGHT0);
m_skybox.Render(skybox);
// Plancher
// Les vertex doivent etre affiches dans le sens anti-horaire (CCW)
all.Use();
m_shader01.Use();
m_textureFloor.Bind();
float nbRep = 5.f;
glBegin(GL_QUADS);
@@ -206,9 +137,9 @@ void Engine::Render(float elapsedTime)
}
if (m_testChunk.IsDirty())
m_testChunk.Update();
m_shader01.Use();
m_testChunk.Render();
Shader::Disable();
//Shader::Disable();
}