static void DisplayResults(TView* view) { unsigned long i; register TElement* ep; TSpectra ambient; GetAmbient(&ambient); BeginDraw(view, 0); ep = params->elements; for (i=0; i< params->nElements; i++, ep++) { TColor32b c; TSpectra s; int k; /* add ambient approximation */ if (params->addAmbient) { for (k=kNumberOfRadSamples; k--;) s.samples[k] = (ep->rad.samples[k] + (ambient.samples[k]* ep->patch->reflectance->samples[k]))*params->intensityScale; } else { for (k=kNumberOfRadSamples; k--; ) s.samples[k] = ep->rad.samples[k]*params->intensityScale; } /* quantize color */ c = SpectraToRGB(&s); DrawElement(ep, *(unsigned long*)&c); } EndDraw(); }
Color<real> BlinnPhongShader<real>::Shade() { Color<real> finalColor( 0, 0, 0, 1 ); const LightVector& lights = mScene.GetLights(); //////////////////////////////////////////// //////////////////IFT 3355////////////////// //////////////////////////////////////////// //Ici, vous assemblerez toutes les //composantes (ambient, diffus, spéculaire, //réflexion, réfraction). Vous ferez //également en sorte de déterminer //l'ombrage du point. //N.B. //Lisez d'abord les méthodes qui suivent avant //de commencer le codage. //////////////////////////////////////////// //////////////////IFT 3355////////////////// //////////////////////////////////////////// // Clamp the color to white for (uint i = 0; i < lights.size(); ++i) { finalColor += GetAmbient(*lights[i]); finalColor += GetDiffuseAndSpecular(*lights[i]); } if (!mMaterial.GetReflection().IsBlack()) finalColor += GetReflection(); if (!mMaterial.GetRefraction().IsBlack()) finalColor += GetRefraction(); finalColor.Clamp( Color<real>( 1, 1, 1, 1 ) ); return finalColor; }
void GlfSimpleMaterial::Bind() { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, GetAmbient().GetArray()); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, GetDiffuse().GetArray()); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, GetSpecular().GetArray()); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, GetEmission().GetArray()); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, GetShininess()); }
void Light::SetupLight(int lightIndex){ glEnable(GL_LIGHT0+lightIndex); // Setup and enable light 0 glLightfv(GL_LIGHT0+lightIndex,GL_AMBIENT, glm::value_ptr(GetAmbient())); glLightfv(GL_LIGHT0+lightIndex,GL_DIFFUSE, glm::value_ptr(GetDiffuse())); glLightfv(GL_LIGHT0+lightIndex,GL_SPECULAR, glm::value_ptr(GetSpecular())); glLighti(GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, spotCutoff); glLightfv(GL_LIGHT0+lightIndex,GL_SPOT_DIRECTION, glm::value_ptr(spotDirection)); float w = 0; if (GetLightType()==PointLight){ w = 1; } else if (GetLightType()==DirectionalLight){ w = 0; } SceneObject *sceneObject = GetOwner(); assert(sceneObject != NULL); glm::vec4 lightPos(sceneObject->GetTransform()->GetPosition(), w); glLightfv(GL_LIGHT0+lightIndex,GL_POSITION, glm::value_ptr(lightPos)); }
//???????????????????????????????????????????????????????????????????????? // The stdID parameter doesn't really have a meaning in this case. // bool Matte::EvalMonoStdChannel ( ShadeContext& sc, // describes context of evaluation int stdID, // must be ID_AM, ect float& outVal // output var ) { switch ( stdID ) { case ID_BU: // Bump (value 8) case ID_RR: // Refraction (value 10) case ID_DP: // Displacement (value 11) case ID_SI: // Self-illumination (value 5) case ID_FI: // Filter color (value 7) return false; break; case ID_RL: // Reflection (value 9) if ( sc.doMaps && reflmap && useReflMap && reflmap->IsOutputMeaningful(sc) ) { if ( reflmap->HandleOwnViewPerturb() ) { sc.TossCache(reflmap); outVal = reflmap->EvalMono(sc); } else { AColor rcol; rcol = sc.EvalEnvironMap( reflmap, sc.ReflectVector() ); Color rc; rc = Color(rcol.r,rcol.g,rcol.b)*reflAmt; outVal = Intens(rc); } } else return false; break; case ID_AM: // Ambient (value 0) outVal = Intens( GetAmbient() ); break; case ID_DI: // Diffuse (value 1) outVal = Intens( GetDiffuse() ); break; case ID_SP: // Specular (value 2) outVal = Intens( GetSpecular() ); break; case ID_SH: // Shininess (value 3). In R3 and later this is called Glossiness. outVal = GetShininess(); break; case ID_SS: // Shininess strength (value 4). In R3 and later this is called Specular Level. outVal = GetShinStr(); break; case ID_OP: // Opacity (value 6) outVal = GetXParency(); break; default: // Should never happen //DbgAssert( false ); return false; break; } return true; }