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