/*! Initialize the scene, reserve shaders, compile and cache program \param[in] None. \return None */ void ObjLoader::InitModel() { ProgramManager* ProgramManagerObj = MapRenderHandler->RendererProgramManager(); Transform* TransformObj = MapRenderHandler->RendererTransform(); if (! ( program = ProgramManagerObj->Program( ( char * )"ADSShader" ) ) ) { program = ProgramManagerObj->ProgramInit( ( char * )"ADSShader" ); ProgramManagerObj->AddProgram( program ); } program->VertexShader = ShaderManager::ShaderInit( VERTEX_SHADER_PRG, GL_VERTEX_SHADER ); program->FragmentShader = ShaderManager::ShaderInit( FRAGMENT_SHADER_PRG, GL_FRAGMENT_SHADER ); ////////////////////////////////////////////////////// /////////// Vertex shader ////////////////////////// ////////////////////////////////////////////////////// CACHE *m = reserveCache( VERTEX_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->VertexShader, ( char * )m->buffer, 1 ) ) exit( 1 ); freeCache( m ); } /////////// Fragment shader ////////////////////////// m = reserveCache( FRAGMENT_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->FragmentShader, ( char * )m->buffer, 1 ) ) exit( 2 ); freeCache( m ); } if( !ProgramManagerObj->ProgramLink( program, 1 ) ) exit( 3 ); // Use Phong Shade Program glUseProgram( program->ProgramID ); char MaterialAmbient = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialAmbient"); char MaterialSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialSpecular"); char MaterialDiffuse = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialDiffuse"); char LightAmbient = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightAmbient"); char LightSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightSpecular"); char LightDiffuse = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightDiffuse"); char ShininessFactor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ShininessFactor"); char LightPosition = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightPosition"); char ModelColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ModelColor"); char DotColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"DotColor"); char Side = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"Side"); if (MaterialAmbient >= 0){ glUniform3f(MaterialAmbient, 0.04f, 0.04f, 0.04f); } if (MaterialSpecular >= 0){ glUniform3f(MaterialSpecular, 1.0, 1.0, 1.0); } glm::vec3 color = glm::vec3(1.0, 1.0, 0.0); if (MaterialDiffuse >= 0){ glUniform3f(MaterialDiffuse, color.r, color.g, color.b); } if (LightAmbient >= 0){ glUniform3f(LightAmbient, 1.0f, 1.0f, 1.0f); } if (LightSpecular >= 0){ glUniform3f(LightSpecular, 1.0, 1.0, 1.0); } if (LightDiffuse >= 0){ glUniform3f(LightDiffuse, 1.0f, 1.0f, 1.0f); } if (ShininessFactor >= 0){ glUniform1f(ShininessFactor, 40); } if ( LightPosition >= 0 ){ glm::vec3 lightPosition(0.0, 5.0, 10); glUniform3fv(LightPosition, 1, (float*)&lightPosition); } if ( ModelColor >= 0 ){ glm::vec3 mColor(0.50, 0.50, 1.0); glUniform3fv(ModelColor, 1, (float*)&mColor); } if ( DotColor >= 0 ){ glm::vec3 dColor(1.0, 1.0, 10); glUniform3fv(DotColor, 1, (float*)&dColor); } if ( Side >= 0 ){ glUniform1f(Side, 80); } MVP = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewProjectionMatrix" ); MV = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewMatrix" ); NormalMatrix = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"NormalMatrix"); return; }
/*! Initialize the scene, reserve shaders, compile and cache program \param[in] None. \return None */ void ObjLoader::InitModel() { ProgramManager* ProgramManagerObj = MapRenderHandler->RendererProgramManager(); Transform* TransformObj = MapRenderHandler->RendererTransform(); if (! ( program = ProgramManagerObj->Program( ( char * )"PolkaShader" ) ) ) { program = ProgramManagerObj->ProgramInit( ( char * )"PolkaShader" ); ProgramManagerObj->AddProgram( program ); } program->VertexShader = ShaderManager::ShaderInit( VERTEX_SHADER_PRG, GL_VERTEX_SHADER ); program->FragmentShader = ShaderManager::ShaderInit( FRAGMENT_SHADER_PRG, GL_FRAGMENT_SHADER ); ////////////////////////////////////////////////////// /////////// Vertex shader ////////////////////////// ////////////////////////////////////////////////////// CACHE *m = reserveCache( VERTEX_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->VertexShader, ( char * )m->buffer, 1 ) ) exit( 1 ); freeCache( m ); } /////////// Fragment shader ////////////////////////// m = reserveCache( FRAGMENT_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->FragmentShader, ( char * )m->buffer, 1 ) ) exit( 2 ); freeCache( m ); } if( !ProgramManagerObj->ProgramLink( program, 1 ) ) exit( 3 ); // Use Phong Shade Program glUseProgram( program->ProgramID ); char MaterialAmbient = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialAmbient"); char MaterialSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialSpecular"); char MaterialDiffuse = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialDiffuse"); char LightAmbient = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightAmbient"); char LightSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightSpecular"); char LightDiffuse = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightDiffuse"); char ShininessFactor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ShininessFactor"); char LightPosition = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightPosition"); timer = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"Time"); toggleIndex = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"toggleDiscardBehaviour"); char Side = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"Side"); char DotSize = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"DotSize"); char ModelColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ModelColor"); char DotColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"DotColor"); char BackSideModelColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"BackSideModelColor"); char BackSideDotColor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"BackSideDotColor"); if (MaterialAmbient >= 0){ glUniform3f(MaterialAmbient, 0.04f, 0.04f, 0.04f); } if (MaterialSpecular >= 0){ glUniform3f(MaterialSpecular, 1.0, 0.5, 0.5); } glm::vec3 color = glm::vec3(1.0, 1.0, 1.0); if (MaterialDiffuse >= 0){ glUniform3f(MaterialDiffuse, color.r, color.g, color.b); } if (LightAmbient >= 0){ glUniform3f(LightAmbient, 1.0f, 1.0f, 1.0f); } if (LightSpecular >= 0){ glUniform3f(LightSpecular, 1.0, 1.0, 1.0); } if (LightDiffuse >= 0){ glUniform3f(LightDiffuse, 1.0f, 1.0f, 1.0f); } if (ShininessFactor >= 0){ glUniform1f(ShininessFactor, 40); } if (LightPosition >= 0){ glUniform3f(LightPosition, 0.0, 0.0, 10.0 ); } if ( toggleIndex >= 0 ){ glUniform1i(toggleIndex, (int)toggle); } if ( Side >= 0 ){ glUniform1f(Side, 0.30); } if ( DotSize >= 0 ){ glUniform1f(DotSize, 0.13); } if (ModelColor >= 0){ glUniform3f(ModelColor, 1.0, 1.0, 1.0 ); } if (DotColor >= 0){ glUniform3f(DotColor, 0.4, 0.5, 1.0 ); } if (BackSideModelColor >= 0){ glUniform3f(BackSideModelColor, 0.0, 1.0, 0.0 ); } if (BackSideDotColor >= 0){ glUniform3f(BackSideDotColor, 1.0, 1.0, 1.0 ); } MVP = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewProjectionMatrix" ); MV = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewMatrix" ); NormalMatrix = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"NormalMatrix"); return; }
/*! Initialize the scene, reserve shaders, compile and cache program \param[in] None. \return None */ void ObjLoader::InitModel() { ProgramManager* ProgramManagerObj = MapRenderHandler->RendererProgramManager(); Transform* TransformObj = MapRenderHandler->RendererTransform(); if (! ( program = ProgramManagerObj->Program( ( char * )"SpecularShader" ) ) ) { program = ProgramManagerObj->ProgramInit( ( char * )"SpecularShader" ); ProgramManagerObj->AddProgram( program ); } program->VertexShader = ShaderManager::ShaderInit( VERTEX_SHADER_PRG, GL_VERTEX_SHADER ); program->FragmentShader = ShaderManager::ShaderInit( FRAGMENT_SHADER_PRG, GL_FRAGMENT_SHADER ); /////////// Vertex shader ////////////////////////// CACHE *m = reserveCache( VERTEX_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->VertexShader, ( char * )m->buffer, 1 ) ) exit( 1 ); freeCache( m ); } /////////// Fragment shader ////////////////////////// m = reserveCache( FRAGMENT_SHADER_PRG, true ); if( m ) { if( !ShaderManager::ShaderCompile( program->FragmentShader, ( char * )m->buffer, 1 ) ) exit( 2 ); freeCache( m ); } if( !ProgramManagerObj->ProgramLink( program, 1 ) ) exit( 3 ); glUseProgram( program->ProgramID ); char MaterialSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"MaterialSpecular"); char LightSpecular = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightSpecular"); char ShininessFactor = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"ShininessFactor"); char LightPosition = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"LightPosition"); if (MaterialSpecular >= 0){ glUniform3f(MaterialSpecular, 1.0, 0.5, 0.5); } if (LightSpecular >= 0){ glUniform3f(LightSpecular, 1.0, 1.0, 1.0); } if (ShininessFactor >= 0){ glUniform1f(ShininessFactor, 40); } if (LightPosition >= 0){ glm::vec3 lightPosition(0.0, 0.0, 10.0); glUniform3fv(LightPosition, 1, (float*)&lightPosition); } MVP = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewProjectionMatrix" ); MV = ProgramManagerObj->ProgramGetUniformLocation( program, ( char* )"ModelViewMatrix" ); NormalMatrix = ProgramManagerObj->ProgramGetUniformLocation(program, (char*)"NormalMatrix"); return; }