Exemplo n.º 1
0
        private MeshRenderer[] GatherMeshes(ref Matrix4 proj, Camera camera, Material.PBRMaterial m)
        {
            List <MeshRenderer> meshes = new List <MeshRenderer>();

            if (lightMesh != null)
            {
                lightMesh.Mat            = lightMat;
                lightMesh.IsLight        = true;
                lightMesh.CameraPosition = camera.EyePosition;
                lightMesh.IrradianceMap  = HdriManager.Irradiance;
                lightMesh.PrefilterMap   = HdriManager.Prefiltered;
                lightMesh.Projection     = proj;
                lightMesh.Model          = light.WorldMatrix;
                lightMesh.View           = camera.View;
                lightMesh.LightColor     = light.Color;
                lightMesh.LightPosition  = light.Position;
                lightMesh.LightPower     = light.Power;
                lightMesh.Near           = camera.Near;
                lightMesh.Far            = camera.Far;

                meshes.Add(lightMesh);
            }

            var mesh = GetCurrentMesh(ref proj, camera, m);

            if (mesh != null)
            {
                meshes.Add(mesh);
            }

            return(meshes.ToArray());
        }
Exemplo n.º 2
0
        public void Release()
        {
            if (defaultBlack != null)
            {
                defaultBlack.Release();
                defaultBlack = null;
            }

            if (defaultWhite != null)
            {
                defaultWhite.Release();
                defaultWhite = null;
            }

            if (defaultGray != null)
            {
                defaultGray.Release();
                defaultGray = null;
            }

            if (defaultDarkGray != null)
            {
                defaultDarkGray.Release();
                defaultDarkGray = null;
            }

            HdriManager.Release();

            if (mat != null)
            {
                mat.Release();
                mat = null;
            }

            if (sphere != null)
            {
                sphere.Release();
                sphere = null;
            }

            if (cube != null)
            {
                cube.Release();
                cube = null;
            }

            if (glview != null)
            {
                FHost.Child = null;
                glview.Dispose();
                glview = null;
            }
        }
Exemplo n.º 3
0
        void LoadMeshes()
        {
            LoadDefaultTextures();

            try
            {
                string        pcube                = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cube.obj");
                RSMI.Importer importer             = new RSMI.Importer();
                List <RSMI.Containers.Mesh> meshes = importer.Parse(pcube);

                if (mat == null)
                {
                    mat = new Material.PBRMaterial
                    {
                        Metallic  = defaultBlack,
                        Albedo    = defaultDarkGray,
                        Occlusion = defaultWhite,
                        Roughness = defaultBlack,
                        Height    = defaultWhite,
                        Thickness = defaultBlack,
                        Emission  = defaultBlack
                    };
                }

                if (tessMat == null)
                {
                    tessMat = new Material.PBRTess
                    {
                        Metallic  = defaultBlack,
                        Albedo    = defaultDarkGray,
                        Occlusion = defaultWhite,
                        Roughness = defaultBlack,
                        Height    = defaultBlack,
                        Thickness = defaultBlack,
                        Emission  = defaultBlack
                    };
                }

                if (meshes.Count > 0)
                {
                    cubeMesh = meshes[0];
                    cube     = new MeshRenderer(meshes[0]);
                    cube.Mat = mat;

                    if (UIPreviewPane.Instance != null)
                    {
                        UIPreviewPane.Instance.SetMesh(cube);
                    }
                }

                string psphere = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "sphere.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(psphere);

                if (meshes.Count > 0)
                {
                    sphereMesh    = meshes[0];
                    sphere        = new MeshRenderer(meshes[0]);
                    sphere.Mat    = mat;
                    lightMesh     = new MeshRenderer(meshes[0]);
                    lightMesh.Mat = lightMat;
                }

                string prounded = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cube-rounded.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(prounded);

                if (meshes.Count > 0)
                {
                    cubeRoundedMesh = meshes[0];
                    cubeRounded     = new MeshRenderer(meshes[0]);
                    cubeRounded.Mat = mat;
                }

                //NOTE TO SELF: Recreate the cylnder 3D object with better UV
                string pcyl = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cylinder.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(pcyl);

                if (meshes.Count > 0)
                {
                    cylinderMesh = meshes[0];
                    cylinder     = new MeshRenderer(meshes[0]);
                    cylinder.Mat = mat;
                }

                string pplane = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "plane.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(pplane);

                if (meshes.Count > 0)
                {
                    planeMesh = meshes[0];
                    plane     = new MeshRenderer(meshes[0]);
                    plane.Mat = mat;
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Exemplo n.º 4
0
        public void Release()
        {
            if (renderStack != null)
            {
                renderStack.Release();
                renderStack = null;
            }

            if (materialSettings != null)
            {
                materialSettings.Save();
            }

            if (lightMat != null)
            {
                lightMat.Release();
                lightMat = null;
            }

            if (defaultBlack != null)
            {
                defaultBlack.Release();
                defaultBlack = null;
            }

            if (defaultWhite != null)
            {
                defaultWhite.Release();
                defaultWhite = null;
            }

            if (defaultGray != null)
            {
                defaultGray.Release();
                defaultGray = null;
            }

            if (defaultDarkGray != null)
            {
                defaultDarkGray.Release();
                defaultDarkGray = null;
            }

            HdriManager.Release();

            if (tessMat != null)
            {
                tessMat.Release();
                tessMat = null;
            }

            if (mat != null)
            {
                mat.Release();
                mat = null;
            }

            if (sphere != null)
            {
                sphere.Release();
                sphere = null;
            }

            if (cube != null)
            {
                cube.Release();
                cube = null;
            }

            if (cylinder != null)
            {
                cylinder.Release();
                cylinder = null;
            }

            if (cubeRounded != null)
            {
                cubeRounded.Release();
                cubeRounded = null;
            }

            if (plane != null)
            {
                plane.Release();
                plane = null;
            }

            if (custom != null)
            {
                custom.Release();
                custom = null;
            }

            if (lightMesh != null)
            {
                lightMesh.Release();
                lightMesh = null;
            }

            if (glview != null)
            {
                FHost.Child = null;
                glview.Dispose();
                glview = null;
            }
        }
Exemplo n.º 5
0
        private MeshRenderer GetCurrentMesh(ref Matrix4 proj, Camera camera, Material.PBRMaterial m)
        {
            if (previewType == PreviewGeometryType.Cube)
            {
                if (cube != null)
                {
                    cube.Mat            = m;
                    cube.CameraPosition = camera.EyePosition;
                    cube.IrradianceMap  = HdriManager.Irradiance;
                    cube.PrefilterMap   = HdriManager.Prefiltered;
                    cube.Projection     = proj;
                    cube.Model          = previewObject.WorldMatrix;
                    cube.View           = camera.View;
                    cube.LightColor     = light.Color;
                    cube.LightPosition  = light.Position;
                    cube.LightPower     = light.Power;
                    cube.Near           = camera.Near;
                    cube.Far            = camera.Far;

                    return(cube);
                }
            }
            else if (previewType == PreviewGeometryType.Sphere)
            {
                if (sphere != null)
                {
                    sphere.Mat            = m;
                    sphere.CameraPosition = camera.EyePosition;
                    sphere.IrradianceMap  = HdriManager.Irradiance;
                    sphere.PrefilterMap   = HdriManager.Prefiltered;
                    sphere.Projection     = proj;
                    sphere.Model          = previewObject.WorldMatrix;
                    sphere.View           = camera.View;
                    sphere.LightColor     = light.Color;
                    sphere.LightPosition  = light.Position;
                    sphere.LightPower     = light.Power;
                    sphere.Near           = camera.Near;
                    sphere.Far            = camera.Far;

                    return(sphere);
                }
            }
            else if (previewType == PreviewGeometryType.Cylinder)
            {
                if (cylinder != null)
                {
                    cylinder.Mat            = m;
                    cylinder.CameraPosition = camera.EyePosition;
                    cylinder.IrradianceMap  = HdriManager.Irradiance;
                    cylinder.PrefilterMap   = HdriManager.Prefiltered;
                    cylinder.Projection     = proj;
                    cylinder.Model          = previewObject.WorldMatrix;
                    cylinder.View           = camera.View;
                    cylinder.LightColor     = light.Color;
                    cylinder.LightPosition  = light.Position;
                    cylinder.LightPower     = light.Power;
                    cylinder.Near           = camera.Near;
                    cylinder.Far            = camera.Far;

                    return(cylinder);
                }
            }
            else if (previewType == PreviewGeometryType.Plane)
            {
                if (plane != null)
                {
                    plane.Mat            = m;
                    plane.CameraPosition = camera.EyePosition;
                    plane.IrradianceMap  = HdriManager.Irradiance;
                    plane.PrefilterMap   = HdriManager.Prefiltered;
                    plane.Projection     = proj;
                    plane.Model          = previewObject.WorldMatrix;
                    plane.View           = camera.View;
                    plane.LightColor     = light.Color;
                    plane.LightPosition  = light.Position;
                    plane.LightPower     = light.Power;
                    plane.Near           = camera.Near;
                    plane.Far            = camera.Far;

                    return(plane);
                }
            }
            else if (previewType == PreviewGeometryType.RoundedCube)
            {
                if (cubeRounded != null)
                {
                    cubeRounded.Mat            = m;
                    cubeRounded.CameraPosition = camera.EyePosition;
                    cubeRounded.IrradianceMap  = HdriManager.Irradiance;
                    cubeRounded.PrefilterMap   = HdriManager.Prefiltered;
                    cubeRounded.Projection     = proj;
                    cubeRounded.Model          = previewObject.WorldMatrix;
                    cubeRounded.View           = camera.View;
                    cubeRounded.LightColor     = light.Color;
                    cubeRounded.LightPosition  = light.Position;
                    cubeRounded.LightPower     = light.Power;
                    cubeRounded.Near           = camera.Near;
                    cubeRounded.Far            = camera.Far;

                    return(cubeRounded);
                }
            }
            else if (previewType == PreviewGeometryType.Custom)
            {
                if (custom != null)
                {
                    custom.Mat            = m;
                    custom.CameraPosition = camera.EyePosition;
                    custom.IrradianceMap  = HdriManager.Irradiance;
                    custom.PrefilterMap   = HdriManager.Prefiltered;
                    custom.Projection     = proj;
                    custom.Model          = previewObject.WorldMatrix;
                    custom.View           = camera.View;
                    custom.LightColor     = light.Color;
                    custom.LightPosition  = light.Position;
                    custom.LightPower     = light.Power;
                    custom.Near           = camera.Near;
                    custom.Far            = camera.Far;

                    return(custom);
                }
            }

            return(null);
        }
Exemplo n.º 6
0
        public void Release()
        {
            if (defaultBlack != null)
            {
                defaultBlack.Release();
                defaultBlack = null;
            }

            if (defaultWhite != null)
            {
                defaultWhite.Release();
                defaultWhite = null;
            }

            if (defaultGray != null)
            {
                defaultGray.Release();
                defaultGray = null;
            }

            if (defaultDarkGray != null)
            {
                defaultDarkGray.Release();
                defaultDarkGray = null;
            }

            if (irradiance != null)
            {
                irradiance.Release();
                irradiance = null;
            }

            if (prefiltered != null)
            {
                prefiltered.Release();
                prefiltered = null;
            }

            if (mat != null)
            {
                mat.Release();
                mat = null;
            }

            if (sphere != null)
            {
                sphere.Release();
                sphere = null;
            }

            if (cube != null)
            {
                cube.Release();
                cube = null;
            }

            if (glview != null)
            {
                FHost.Child = null;
                glview.Dispose();
                glview = null;
            }
        }
Exemplo n.º 7
0
        void LoadMeshes()
        {
            LoadDefaultTextures();

            try
            {
                string        pcube                = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cube.obj");
                RSMI.Importer importer             = new RSMI.Importer();
                List <RSMI.Containers.Mesh> meshes = importer.Parse(pcube);

                if (mat == null)
                {
                    mat = new Material.PBRMaterial
                    {
                        Metallic  = defaultBlack,
                        Albedo    = defaultDarkGray,
                        Occlusion = defaultWhite,
                        Roughness = defaultBlack,
                        Height    = defaultWhite
                    };
                }

                if (meshes.Count > 0)
                {
                    cubeMesh = meshes[0];
                    cube     = new MeshRenderer(meshes[0]);
                    cube.Mat = mat;

                    if (UIPreviewPane.Instance != null)
                    {
                        UIPreviewPane.Instance.SetMesh(cube);
                    }
                }

                string psphere = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "sphere.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(psphere);

                if (meshes.Count > 0)
                {
                    sphereMesh = meshes[0];
                    sphere     = new MeshRenderer(meshes[0]);
                    sphere.Mat = mat;
                }

                string prounded = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cube-rounded.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(prounded);

                if (meshes.Count > 0)
                {
                    cubeRoundedMesh = meshes[0];
                    cubeRounded     = new MeshRenderer(meshes[0]);
                    cubeRounded.Mat = mat;
                }

                string pcyl = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "cylinder.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(pcyl);

                if (meshes.Count > 0)
                {
                    cylinderMesh = meshes[0];
                    cylinder     = new MeshRenderer(meshes[0]);
                    cylinder.Mat = mat;
                }

                string pplane = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Geometry", "plane.obj");
                importer = new RSMI.Importer();
                meshes   = importer.Parse(pplane);

                if (meshes.Count > 0)
                {
                    planeMesh = meshes[0];
                    plane     = new MeshRenderer(meshes[0]);
                    plane.Mat = mat;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
        }