Esempio n. 1
0
// bind phong shader specific content for drawing
void CPhongShader::BindShaderWithObjectForDrawing( CObject* t_object ) {
    assert( t_object && _light );
    CPerspCamShader::BindShaderWithObjectForDrawing( t_object );

    glUniform3fv( _uni_lightPos, 1, glm::value_ptr( _light->GetPos() ) );
    glUniform3fv( _uni_lightLs, 1, glm::value_ptr( _light->GetLs() ) );
    glUniform3fv( _uni_lightLd, 1, glm::value_ptr( _light->GetLd() ) );
    glUniform3fv( _uni_lightLa, 1, glm::value_ptr( _light->GetLa() ) );

    CMaterial* mtl = &(t_object->GetMaterial());
    glUniform3fv( _uni_mtlKd, 1, glm::value_ptr( mtl->GetKd()._Color ) );
    if( mtl->GetHasSpecular() ) {
        glUniform3fv( _uni_mtlKs, 1, glm::value_ptr( mtl->GetKs()._Color ) );
        glUniform1f( _uni_mtlSplExp, mtl->GetSplExp() );
    }
    else{
        // set ks to all zeros
        glUniform3f( _uni_mtlKs, 0.f, 0.f, 0.f );
    }


    glUniform3fv( _uni_mtlKa, 1, glm::value_ptr( mtl->GetKa()._Color ) );

}