TP3 + classe Skybox
This commit is contained in:
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user