//private void ExportSampler() //{ // _mitsubaXml.CreateSamplerXml(); //} /// <summary> /// This method exports the Mitsuba emitters: lights and environment. /// /// NOTE: if you try to get the environment with RhinoDoc.ActiveDoc.RenderEnvironments[0] /// Rhino crashes with a "pure virtual function called" error... /// </summary> private void ExportEmitters() { if (RhinoDoc.ActiveDoc.RenderEnvironments.Count > 0) { //HDR environment var environment = RenderEnvironment.CurrentEnvironment; var texture = environment.FindChild("texture"); if (texture != null) { var env_file = texture.Fields.GetField("filename").ValueAsObject(); _mitsubaXml.CreateEnvironmentEmitterXml(env_file.ToString()); } } //Lights foreach (var obj in RhinoDoc.ActiveDoc.Objects.GetObjectList(ObjectType.Light)) { if (!obj.Visible) { continue; } var objRef = new ObjRef(obj); var light = objRef.Light(); MitsubaEmitter emitter = null; if (light.IsPointLight) { //var location = light.Location; //var spectrum = light.Diffuse; //var sampleWeight = light.Intensity; emitter = new PointLightSource(light.Location, (float)light.Intensity * 100); } else if (light.IsSpotLight) { var origin = light.Location; var target = light.Direction; var cutoffAngle = (float)RhinoMath.ToDegrees(light.SpotAngleRadians); var intensity = (float)light.Intensity * 50000; //TODO Multiplicador SpotLight ??? emitter = new SpotLightSource(origin, target, intensity, cutoffAngle); } else if (light.IsSunLight) { //TODO SunLight } if (emitter != null) { _mitsubaXml.CreateEmitterXml(emitter); } } }
void OnSceneGUI() { SpotLightSource source = target as SpotLightSource; // Draw test raycasts Info <List <Vector3>, List <Vector3>, List <bool> > testInfo = source.GetTestRaycasts(); if (testInfo != null) { for (int i = 0; i < testInfo.arg1.Count; i++) { Handles.color = (testInfo.arg2[i]) ? Color.green : Color.red; Handles.DrawLine(testInfo.arg0[i], testInfo.arg0[i] + testInfo.arg1[i]); } } }