Exemple #1
0
        private void DrawPlanes(Canvas3D Canvas)
        {
            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, 100, 100, 1),
                new Vector4(-200, 100, 300, 1),
                new Vector4(200, 100, 300, 1),
                new Vector4(200, 100, 100, 1)
            }, SKColors.Red);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(100, -200, 100, 1),
                new Vector4(100, -200, 300, 1),
                new Vector4(100, 200, 300, 1),
                new Vector4(100, 200, 100, 1)
            }, SKColors.Green);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, -200, 200, 1),
                new Vector4(200, -200, 200, 1),
                new Vector4(200, 200, 200, 1),
                new Vector4(-200, 200, 200, 1),
            }, new SKColor(0, 0, 255, 64));
        }
Exemple #2
0
        public void Canvas3D_Test_02_Line()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 1, SKColors.White);

            this.DrawCurve(Canvas);
            this.Save(Canvas, "02.png");
        }
Exemple #3
0
        private void DrawPlanes(Canvas3D Canvas)
        {
            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-500, 100, 1000, 1),
                new Vector4(-500, 100, 2000, 1),
                new Vector4(500, 100, 2000, 1),
                new Vector4(500, 100, 1000, 1)
            }, SKColors.Red, true);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(100, -500, 1000, 1),
                new Vector4(100, -500, 2000, 1),
                new Vector4(100, 500, 2000, 1),
                new Vector4(100, 500, 1000, 1)
            }, SKColors.Green, true);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-500, -500, 1500, 1),
                new Vector4(500, -500, 1500, 1),
                new Vector4(500, 500, 1500, 1),
                new Vector4(-500, 500, 1500, 1),
            }, new SKColor(0, 0, 255, 64), true);
        }
Exemple #4
0
        public void Canvas3D_Test_03_Oversampling()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            this.DrawCurve(Canvas);
            this.Save(Canvas, "03.png");
        }
Exemple #5
0
        private void DrawThreePlanes(Canvas3D Canvas, I3DShader Shader, float x, float y, float z)
        {
            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-500, 500, z, 1),
                new Vector4(500, 500, z, 1),
                new Vector4(500, -500, z, 1),
                new Vector4(-500, -500, z, 1)
            }, Shader, true);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(x, 500, 1000, 1),
                new Vector4(x, 500, 2000, 1),
                new Vector4(x, -500, 2000, 1),
                new Vector4(x, -500, 1000, 1)
            }, Shader, true);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-500, y, 2000, 1),
                new Vector4(500, y, 2000, 1),
                new Vector4(500, y, 1000, 1),
                new Vector4(-500, y, 1000, 1)
            }, Shader, true);
        }
Exemple #6
0
        public static void Init(Window window, Canvas3D mainCanvas)
        {
            //Initialize Graphics API
            Service.Set <GraphicDeviceFactory>(new IgneelD3D10.GraphicManager10());

            //Initialize Input API
            Service.Set <Igneel.Input.InputManager>(new IgneelDirectInput.DInputManager());

            //Initialize shader respository
            ShaderRepository.SetupD3D10_SM40(_shaderRepositoryDir);

            var gfactory = Service.Require <GraphicDeviceFactory>();
            var iFactory = Service.Get <Igneel.Input.InputManager>();

            //Helper to get the HWND Handle
            var interopHelper = new WindowInteropHelper(window);

            //The canvas size
            var size = mainCanvas.RenderSize;

            EngineState.Shading.FillMode = FillMode.Wireframe;

            //Initialize the Canvas. The Canvas3D is used to render to the screen in a WPF context
            //this is achived by creating a GraphicPresenter
            mainCanvas.Init();

            //Initialize the Engine and creating the IGraphicContext by setting the BackBuffer and DepthStencil descriptions
            Engine.Initialize(new InputContext(interopHelper.Handle), new GraphicDeviceDesc
            {
                Adapter    = 0,
                DriverType = GraphicDeviceType.Hardware,
                Context    = new WindowContext(mainCanvas.Handle)
                {
                    BackBufferWidth    = (int)size.Width,
                    BackBufferHeight   = (int)size.Height,
                    BackBufferFormat   = Format.R8G8B8A8_UNORM_SRGB,
                    DepthStencilFormat = Format.D24_UNORM_S8_UINT,
                    FullScreen         = false,
                    Sampling           = new Multisampling(1, 0),
                    Presentation       = PresentionInterval.Default
                }
            });

            //Set the Engine presenter to the Canvas3D presenter
            //this instruct the Engine to render the content using the Canvas3D GraphicPresenter
            Engine.Presenter = mainCanvas.CreateDafultPresenter();

            //Set default Lighting and Shading properties
            EngineState.Lighting.HemisphericalAmbient = true;
            EngineState.Lighting.Reflection.Enable    = true;
            EngineState.Lighting.TransparencyEnable   = true;
            EngineState.Shading.BumpMappingEnable     = true;

            //Initialize the Hight Level rendering System
            //This will register the renders fo each components for each supported shading techniques
            InitializeRendering();

            //InitializeServices();
        }
Exemple #7
0
        public void Canvas3D_Test_10_PhongShading_Oversampling_3()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            Canvas.ProjectZ(500);
            this.DrawThreePlanes(Canvas);
            this.Save(Canvas, "10.png");
        }
Exemple #8
0
        public void Canvas3D_Test_06_ZBuffer()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            Canvas.ProjectZ(500);
            this.DrawPlanes(Canvas);
            this.Save(Canvas, "06.png");
        }
Exemple #9
0
        public void Canvas3D_Test_04_Perspective()
        {
            Canvas3D Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);
            this.DrawWireframeCube(Canvas);
            this.Save(Canvas, "04.png");
        }
Exemple #10
0
        public void Canvas3D_Test_04_Perspective()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            Canvas.ProjectZ(500);
            this.DrawWireframeCube(Canvas);
            this.Save(Canvas, "04.png");
        }
Exemple #11
0
        protected override void OnStartup(StartupEventArgs e)
        {
            VixWorld = new SharedWorld();

            Canvas3D.UsePhysics = true;
            Canvas3D.StartVixen(VixWorld);
            base.OnStartup(e);
        }
Exemple #12
0
        public void Canvas3D_Test_06_ZBuffer()
        {
            Canvas3D Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);
            this.DrawPlanes(Canvas);
            this.Save(Canvas, "06.png");
        }
Exemple #13
0
        public void Canvas3D_Test_05_Polygon()
        {
            Canvas3D Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);
            this.DrawCube(Canvas);
            this.Save(Canvas, "05.png");
        }
Exemple #14
0
        public void Canvas3D_Test_05_Polygon()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            Canvas.ProjectZ(500);
            this.DrawCube(Canvas);
            this.Save(Canvas, "05.png");
        }
        public static void DrawGBuffers <T>()
            where T : Effect
        {
            var technique = RenderManager.ActiveTechnique as DefferedLigthing <T>;

            if (technique != null)
            {
                Form form = new Form();
                form.BackColor     = Color.Blue;
                form.StartPosition = FormStartPosition.CenterScreen;
                form.Size          = new System.Drawing.Size(800, 600);

                form.SuspendLayout();

                Canvas3D canvas = new Canvas3D()
                {
                    Width  = form.Width,
                    Height = form.Height
                };
                canvas.Dock = DockStyle.Fill;
                var presenter = canvas.CreateSwapChainPresenter();
                form.Controls.Add(canvas);
                form.ResumeLayout();

                Engine.RenderFrame += () =>
                {
                    presenter.Begin(new Color4(Color.Aqua.ToArgb()));

                    var device       = GraphicDeviceFactory.Device;
                    var untranformed = Service.Require <RenderQuadEffect>();

                    var sprite = Service.Require <Sprite>();
                    sprite.Begin();
                    var width  = device.GetRenderTarget(0).Width / 2;
                    var height = device.GetRenderTarget(0).Height / 2;

                    device.Ps.SamplerStacks[0].Push(SamplerState.Point);
                    device.Blend = SceneTechnique.NoBlend;
                    var textures = technique.Textures;
                    for (int i = 0; i < 2; i++)
                    {
                        for (int j = 0; j < 2; j++)
                        {
                            device.Ps.SetResource(0, textures[i * 2 + j]);
                            sprite.SetTrasform(untranformed, new Igneel.Rectangle(width * j, height * i, width, height), Matrix.Identity);
                            sprite.DrawQuad(untranformed);
                        }
                    }
                    sprite.End();

                    device.Ps.SamplerStacks[0].Pop();

                    presenter.End();
                };

                form.Show();
            }
        }
Exemple #16
0
        public void Canvas3D_Test_10_PhongShading_Oversampling_3()
        {
            I3DShader Shader = this.GetPhongShader(SKColors.Red);
            Canvas3D  Canvas = new Canvas3D(1200, 800, 3, SKColors.White);

            Canvas.Perspective(200, 2000);
            this.DrawThreePlanes(Canvas, Shader);
            this.Save(Canvas, "10.png");
        }
Exemple #17
0
        public void Canvas3D_Test_07_Text()
        {
            Canvas3D Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);
            this.DrawPlanes(Canvas);
            Canvas.Text("Hello World!", new Vector4(-400, 50, 1150, 1), "Tahoma", 150, SKColors.BlueViolet);

            this.Save(Canvas, "07.png");
        }
Exemple #18
0
        public void Canvas3D_Test_07_Text()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 3, SKColors.White);

            Canvas.ProjectZ(500);
            this.DrawPlanes(Canvas);
            //Canvas.Text("d", new Vector4(-100, -100, 150, 1), "Tahoma", 100, SKColors.BlueViolet);
            Canvas.Text("Hello World!", new Vector4(-200, -100, 150, 1), "Tahoma", 100, SKColors.BlueViolet);

            this.Save(Canvas, "07.png");
        }
Exemple #19
0
        private void Save(Canvas3D Canvas, string FileName)
        {
            if (!Directory.Exists("Canvas3D"))
            {
                Directory.CreateDirectory("Canvas3D");
            }

            using (SKImage Image = Canvas.GetBitmap())
            {
                using (SKData Data = Image.Encode(SKEncodedImageFormat.Png, 100))
                {
                    File.WriteAllBytes(Path.Combine("Canvas3D", FileName), Data.ToArray());
                }
            }
        }
Exemple #20
0
        public void Canvas3D_Test_01_Plot()
        {
            Canvas3D Canvas = new Canvas3D(640, 480, 1, SKColors.White);
            int      t;

            for (t = 0; t < 1000000; t++)
            {
                double  x = t * Math.Sin(t / 10000.0) / 5000.0;
                double  y = t * Math.Cos(t / 20000.0) / 5000.0;
                double  z = t / 10000.0;
                Vector4 P = new Vector4((float)x, (float)y, (float)z, 1);
                Canvas.Plot(P, SKColors.Red);
            }

            this.Save(Canvas, "01.png");
        }
Exemple #21
0
        public static void Init(MainWindow window, Canvas3D mainCanvas)
        {
            Service.Set <GraphicDeviceFactory>(new IgneelD3D10.GraphicManager10());
            // Service.Set<PhysicManager>(new Igneel.PhysX.PXPhysicManager());
            Service.Set <Igneel.Input.InputManager>(new IgneelDirectInput.DInputManager());

            ShaderRepository.SetupD3D10_SM40(_shaderRepositoryDir);

            var gfactory = Service.Require <GraphicDeviceFactory>();
            var pFactory = Service.Get <PhysicManager>();
            var iFactory = Service.Get <Igneel.Input.InputManager>();

            var interopHelper = new WindowInteropHelper(window);
            var size          = mainCanvas.RenderSize;

            EngineState.Shadow.ShadowMapping.Size = 3;

            mainCanvas.Init();

            Engine.Initialize(new InputContext(interopHelper.Handle), new GraphicDeviceDesc
            {
                Adapter    = 0,
                DriverType = GraphicDeviceType.Hardware,
                Context    = new WindowContext(mainCanvas.Handle)
                {
                    BackBufferWidth    = (int)size.Width,
                    BackBufferHeight   = (int)size.Height,
                    BackBufferFormat   = Format.R8G8B8A8_UNORM_SRGB,
                    DepthStencilFormat = Format.D24_UNORM_S8_UINT,
                    FullScreen         = false,
                    Sampling           = new Multisampling(1, 0),
                    Presentation       = PresentionInterval.Default
                }
            });
            Engine.Presenter = mainCanvas.CreateDafultPresenter();

            EngineState.Lighting.HemisphericalAmbient = true;
            EngineState.Lighting.Reflection.Enable    = true;
            EngineState.Lighting.TransparencyEnable   = true;
            EngineState.Shading.BumpMappingEnable     = true;



            InitializeRendering();
            InitializeServices();
        }
Exemple #22
0
        private void DrawWireframeCube(Canvas3D Canvas)
        {
            Vector4 P0 = new Vector4(-200, -200, 100, 1);
            Vector4 P1 = new Vector4(-200, -200, 300, 1);
            Vector4 P2 = new Vector4(200, -200, 300, 1);
            Vector4 P3 = new Vector4(200, -200, 100, 1);
            Vector4 P4 = new Vector4(-200, 200, 100, 1);
            Vector4 P5 = new Vector4(-200, 200, 300, 1);
            Vector4 P6 = new Vector4(200, 200, 300, 1);
            Vector4 P7 = new Vector4(200, 200, 100, 1);

            Canvas.PolyLine(new Vector4[] { P0, P1, P2, P3, P0 }, SKColors.Red);
            Canvas.PolyLine(new Vector4[] { P4, P5, P6, P7, P4 }, SKColors.Red);
            Canvas.Line(P0, P4, SKColors.Red);
            Canvas.Line(P1, P5, SKColors.Red);
            Canvas.Line(P2, P6, SKColors.Red);
            Canvas.Line(P3, P7, SKColors.Red);
        }
Exemple #23
0
        private void DrawCube(Canvas3D Canvas)
        {
            Vector4 P0 = new Vector4(-200, -200, 100, 1);
            Vector4 P1 = new Vector4(-200, -200, 300, 1);
            Vector4 P2 = new Vector4(200, -200, 300, 1);
            Vector4 P3 = new Vector4(200, -200, 100, 1);
            Vector4 P4 = new Vector4(-200, 200, 100, 1);
            Vector4 P5 = new Vector4(-200, 200, 300, 1);
            Vector4 P6 = new Vector4(200, 200, 300, 1);
            Vector4 P7 = new Vector4(200, 200, 100, 1);

            Canvas.Polygon(new Vector4[] { P0, P1, P2, P3 }, new SKColor(255, 0, 0, 128));
            Canvas.Polygon(new Vector4[] { P4, P5, P6, P7 }, new SKColor(255, 0, 0, 128));
            Canvas.Polygon(new Vector4[] { P1, P2, P6, P5 }, new SKColor(0, 255, 0, 128));
            Canvas.Polygon(new Vector4[] { P0, P1, P5, P4 }, new SKColor(0, 0, 255, 128));
            Canvas.Polygon(new Vector4[] { P2, P3, P7, P6 }, new SKColor(0, 0, 255, 128));
            Canvas.Polygon(new Vector4[] { P0, P3, P7, P4 }, new SKColor(0, 255, 0, 128));
        }
Exemple #24
0
        public void Canvas3D_Test_14_Ellipsoid()
        {
            Canvas3D Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);
            //Canvas.LookAt(-200, 500, 0, 0, 0, 1500, 0, 1, 0);
            Canvas.RotateX(30, new Vector3(0, 0, 1500));
            Canvas.RotateY(45, new Vector3(0, 0, 1500));
            Canvas.RotateZ(60, new Vector3(0, 0, 1500));

            I3DShader Shader = this.GetPhongShader(SKColors.Orange);

            Canvas.Ellipsoid(0, 0, 1500, 400, 400, 400, 1000, Shader);

            Shader = this.GetPhongShader(new SKColor(0, 0, 255, 64));
            this.DrawThreePlanes(Canvas, Shader, 0, 0, 1500);

            this.Save(Canvas, "14.png");
        }
Exemple #25
0
        private void DrawCurve(Canvas3D Canvas)
        {
            int t;

            for (t = 0; t < 10000; t++)
            {
                double  x = t * Math.Sin(t / 100.0) / 50.0;
                double  y = t * Math.Cos(t / 200.0) / 50.0;
                double  z = t / 100.0;
                Vector4 P = new Vector4((float)x, (float)y, (float)z, 1);

                if (t == 0)
                {
                    Canvas.MoveTo(P);
                }
                else
                {
                    Canvas.LineTo(P, SKColors.Red);
                }
            }
        }
Exemple #26
0
    public void Reset()
    {
        GameObject gameObject = new GameObject("Camera_UI3D");

        MonoSingleton <SceneMgr> .GetInstance().AddToRoot(gameObject, SceneObjType.Temp);

        this.m_camera = gameObject.AddComponent <Camera>();
        this.m_camera.CopyFrom(Moba_Camera.currentMobaCamera);
        this.m_camera.orthographic     = true;
        this.m_camera.orthographicSize = 8f;
        this.m_camera.cullingMask      = LayerMask.GetMask(new string[]
        {
            "3DUI"
        });
        this.m_camera.depth                = this.m_camera.depth + 1f;
        this.m_camera.clearFlags           = CameraClearFlags.Nothing;
        gameObject.tag                     = "Untagged";
        this.m_canvas                      = gameObject.AddComponent <Canvas3D>();
        gameObject.transform.position      = new Vector3(1000f, -1000f, 1000f);
        gameObject.transform.localScale    = Vector3.one;
        gameObject.transform.localRotation = Quaternion.identity;
    }
Exemple #27
0
        public void Canvas3D_Test_13_Rotate_Z()
        {
            I3DShader Shader = this.GetPhongShader(SKColors.Red);
            Canvas3D  Canvas = new Canvas3D(1200, 800, 1, SKColors.White);

            Canvas.Perspective(200, 2000);

            this.DrawThreePlanes(Canvas, Shader);

            Shader = this.GetPhongShader(SKColors.Blue);
            Matrix4x4 Bak = Canvas.Translate(-250, 250, 0);

            Canvas.Scale(0.25f, new Vector3(0, 0, 1500));
            Canvas.RotateZ(30, new Vector3(0, 0, 1500));
            Canvas.Box(-500, -500, 1000, 500, 500, 2000, Shader);

            Canvas.ModelTransformation = Bak;
            Canvas.Translate(250, 250, 0);
            Canvas.Scale(0.25f, new Vector3(0, 0, 1500));
            Canvas.RotateZ(120, new Vector3(0, 0, 1500));
            Canvas.Box(-500, -500, 1000, 500, 500, 2000, Shader);

            Canvas.ModelTransformation = Bak;
            Canvas.Translate(-250, -250, 0);
            Canvas.Scale(0.25f, new Vector3(0, 0, 1500));
            Canvas.RotateZ(210, new Vector3(0, 0, 1500));
            Canvas.Box(-500, -500, 1000, 500, 500, 2000, Shader);

            Canvas.ModelTransformation = Bak;
            Canvas.Translate(250, -250, 0);
            Canvas.Scale(0.25f, new Vector3(0, 0, 1500));
            Canvas.RotateZ(500, new Vector3(0, 0, 1500));
            Canvas.Box(-500, -500, 1000, 500, 500, 2000, Shader);

            this.Save(Canvas, "13.png");
        }
Exemple #28
0
        private void DrawThreePlanes(Canvas3D Canvas)
        {
            PhongShader Shader = new PhongShader(
                new PhongMaterial(1, 2, 0, 10),
                new PhongIntensity(64, 64, 64, 255),
                new PhongLightSource(
                    new PhongIntensity(255, 0, 0, 255),
                    new PhongIntensity(255, 255, 255, 255),
                    new Vector3(200, 200, 100)));

            //new Vector3(400, 400, 50)));

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, 200, 300, 1),
                new Vector4(200, 200, 300, 1),
                new Vector4(200, -200, 300, 1),
                new Vector4(-200, -200, 300, 1)
            }, Shader);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, 200, 100, 1),
                new Vector4(-200, 200, 300, 1),
                new Vector4(-200, -200, 300, 1),
                new Vector4(-200, -200, 100, 1)
            }, Shader);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, -200, 300, 1),
                new Vector4(200, -200, 300, 1),
                new Vector4(200, -200, 100, 1),
                new Vector4(-200, -200, 100, 1)
            }, Shader);
        }
Exemple #29
0
/*
 * Reads a DAZ Studio DSF file with a pose in it and produces
 * a Vixen Pose object for this avatar's skeleton.
 * @param posename name of pose
 */
        public Pose ReadPose(System.String posename)
        {
            System.String filename = "pose/" + posename + "pose.dsf";
            Hashtable     poseinfo = new Hashtable();

            try
            {
                /*
                 * Parse the DAZ Studio pose file and extract the rotations
                 * for each bone into a hash table
                 */
                using (StreamReader posefile = new StreamReader(filename))
                {
                    System.String line;
                    Regex         pattern = new Regex("([a-zA-Z0-9]+)" + Regex.Escape(":?") + "rotation/([xyz])");

                    while ((line = posefile.ReadLine()) != null)
                    {
                        Match         match = pattern.Match(line);
                        System.String name;
                        System.String axis;

                        if (!match.Success)
                        {
                            continue;
                        }
                        name = match.Groups[1].ToString();
                        axis = match.Groups[2].ToString();
                        line = posefile.ReadLine();
                        int p = line.IndexOf("[ 0, ");
                        if (p > 0)
                        {
                            System.String s = line.Substring(p + 5);
                            float         angle;
                            Quat          rot;
                            Quat          q = null;

                            s     = s.Substring(0, s.IndexOf("]"));
                            angle = float.Parse(s);
                            if (angle == 0)
                            {
                                continue;
                            }
                            angle *= (float)Math.PI / 180.0f;
                            if (axis == "x")
                            {
                                q = new Quat(Model.XAXIS, angle);
                            }
                            else if (axis == "y")
                            {
                                q = new Quat(Model.YAXIS, angle);
                            }
                            else if (axis == "z")
                            {
                                q = new Quat(Model.ZAXIS, angle);
                            }
                            if (q == null)
                            {
                                continue;
                            }
                            if (poseinfo.Contains(name))
                            {
                                rot = poseinfo[name] as Quat;
                                rot.Mul(rot, q);
                            }
                            else
                            {
                                poseinfo.Add(name, q);
                            }
                        }
                    }
                }

                /*
                 * Convert hash table with rotations into a Pose.
                 * Map DAZ bone names into Vixen bone names.
                 */
                Pose pose = new Pose(BodyPoser);
                foreach (DictionaryEntry entry in poseinfo)
                {
                    System.String key      = entry.Key.ToString();
                    System.String bonename = key;
                    Quat          q        = entry.Value as Quat;
                    int           boneindex;

                    if (key == "abdomen")
                    {
                        bonename = "Torso";
                    }
                    else if (key == "rHand")
                    {
                        bonename = "RightWrist";
                    }
                    else if (key == "lHand")
                    {
                        bonename = "LeftWrist";
                    }
                    else if (key == "rShldr")
                    {
                        bonename = "RightShoulder";
                    }
                    else if (key == "lShldr")
                    {
                        bonename = "LeftShoulder";
                    }
                    else if (key == "rForeArm")
                    {
                        bonename = "RightElbow";
                    }
                    else if (key == "lForeArm")
                    {
                        bonename = "LeftElbow";
                    }
                    else if (key == "rShin")
                    {
                        bonename = "RightKnee";
                    }
                    else if (key == "lShin")
                    {
                        bonename = "LeftShin";
                    }
                    else if (key == "rThigh")
                    {
                        bonename = "RightHip";
                    }
                    else if (key == "lThigh")
                    {
                        bonename = "LeftHip";
                    }
                    else if (key == "lFoot")
                    {
                        bonename = "LeftAnkle";
                    }
                    else if (key == "rFoot")
                    {
                        bonename = "RightAnkle";
                    }
                    boneindex = BodyPoser.GetBoneIndex(bonename);
                    if (boneindex >= 0)
                    {
                        pose.SetLocalRotation(boneindex, q);
                        SharedWorld.Trace(bonename + " " + q.x + " " + q.y + " " + q.z + " " + q.w + "\n");
                    }
                }
                return(pose);
            }
            catch (Exception ex)
            {
                Canvas3D.LogError(ex.Message + " Cannot read pose file " + filename);
                return(null);
            }
        }
        public void EdgeFiltering()
        {
            SceneTests.InitializeScene();

            //var content = ImportContent();
            var content = ContentImporter.Import(SceneManager.Scene, @"C:\Users\ansel\Documents\3dsmax\export\shadowScene.DAE");

            EngineState.Shadow.ShadowMapping.PcfBlurSize = 5;
            content.OnSceneAttach(SceneManager.Scene);

            //ContentImporter.Import(SceneManager.Scene, @"C:\Users\ansel\Documents\3dsmax\export\nissan2.DAE");
            //ContentImporter.Import(SceneManager.Scene, @"C:\Users\ansel\Documents\3dsmax\export\talia.DAE");

            if (SceneManager.Scene.Physics != null)
            {
                SceneManager.Scene.Physics.Enable = true;
            }

            //if (SceneManager.Scene.Lights.Count == 0)
            //{
            //    var light = new Light()
            //    {
            //        Diffuse = new Vector3(1, 1, 1),
            //        Specular = new Vector3(1, 1, 1),
            //        Type = LightType.Directional,
            //        Enable = true
            //    };

            //    SceneManager.Scene.Create("DirectionalLight0", new LightInstance(light),
            //        localRotationEuler: new Euler(0, Numerics.ToRadians(70), 0));
            //}
            FrameLight.CreateShadowMapForAllLights(SceneManager.Scene);
            _technique    = SceneManager.Scene.Lights.Where(x => x.Node.Technique is ShadowMapTechnique).Select(x => (ShadowMapTechnique)x.Node.Technique).FirstOrDefault();
            _targetCamera = _technique.Camera;

            _technique.Bias = 0.9e-2f;

            SceneManager.Scene.AmbientLight.GroundColor = new Vector3(0, 0, 0);
            SceneManager.Scene.AmbientLight.SkyColor    = new Vector3(0.2f, 0.2f, 0.2f);

            EngineState.Shadow.ShadowMapping.PcfBlurSize = 3;
            var edgeTechnique = new EdgeShadowFilteringTechnique();

            RenderManager.PushTechnique(edgeTechnique);
            bool debug = true;

            if (debug)
            {
                Form form = new Form();
                form.BackColor     = Color.Blue;
                form.StartPosition = FormStartPosition.CenterScreen;
                form.Size          = new System.Drawing.Size(edgeTechnique.ShadowFactorTex.Width, edgeTechnique.ShadowFactorTex.Height);

                form.SuspendLayout();

                Canvas3D canvas = new Canvas3D()
                {
                    Width  = form.Width,
                    Height = form.Height
                };
                canvas.Dock = DockStyle.Fill;
                var presenter = canvas.CreateSwapChainPresenter();
                form.Controls.Add(canvas);
                form.ResumeLayout();

                Engine.RenderFrame += () =>
                {
                    presenter.Begin(new Color4(Color.Aqua.ToArgb()));

                    var device = GraphicDeviceFactory.Device;
                    device.Ps.SamplerStacks[0].Push(SamplerState.Linear);
                    device.Blend = SceneTechnique.NoBlend;

                    var texture = edgeTechnique.EdgeSrcTexture;
                    RenderTexture(device, texture, width: texture.Width, height: texture.Height);

                    device.Ps.SamplerStacks[0].Pop();

                    presenter.End();
                };

                form.Show();
            }
        }