GlfSimpleLight HdStLight::_ApproximateAreaLight(SdfPath const &id, HdSceneDelegate *sceneDelegate) { // Get the color of the light GfVec3f hdc = sceneDelegate->GetLightParamValue(id, HdStLightTokens->color) .Get<GfVec3f>(); // Extract intensity float intensity = sceneDelegate->GetLightParamValue(id, HdLightTokens->intensity) .Get<float>(); // Extract the exposure of the light float exposure = sceneDelegate->GetLightParamValue(id, HdLightTokens->exposure) .Get<float>(); intensity *= powf(2.0f, GfClamp(exposure, -50.0f, 50.0f)); // Calculate the final color of the light GfVec4f c(hdc[0]*intensity, hdc[1]*intensity, hdc[2]*intensity, 1.0f); // Get the transform of the light GfMatrix4d transform = _params[HdTokens->transform].Get<GfMatrix4d>(); GfVec3d hdp = transform.ExtractTranslation(); GfVec4f p = GfVec4f(hdp[0], hdp[1], hdp[2], 1.0f); // Create the Glf Simple Light object that will be used by the rest // of the pipeline. No support for shadows for this translated light. GlfSimpleLight l; l.SetPosition(p); l.SetDiffuse(c); l.SetHasShadow(false); return l; }
void GfFrustum::SetPositionAndRotationFromMatrix( const GfMatrix4d &camToWorldXf) { // First conform matrix to be... GfMatrix4d conformedXf = camToWorldXf; // ... right handed if (!conformedXf.IsRightHanded()) { static GfMatrix4d flip(GfVec4d(-1.0, 1.0, 1.0, 1.0)); conformedXf = flip * conformedXf; } // ... and orthonormal conformedXf.Orthonormalize(); SetRotation(conformedXf.ExtractRotation()); SetPosition(conformedXf.ExtractTranslation()); }