示例#1
0
        //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);
                }
            }
        }
示例#2
0
    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]);
            }
        }
    }