示例#1
0
        public static Bitmap RenderIconBitmap(int size)
        {
            var sphere = new SphereObject(new Vector3(0, 0, 0), 1, new DiffuseSolidMaterial(Color.Yellow));
            var light  = new SphericalLightSource(new Vector3(3, -3, -3), 1f);
            var camera = new RectCamera(new Vector3(-1, -1, -4), new Vector3(2, 0, 0), new Vector3(0, 2, 0), -4f);

            var scene = new RayTracerScene(Color.Green);

            scene.LightSources.Add(light);
            scene.Objects.Add(sphere);

            var colors = new int[size * size];

            scene.Render(camera, colors, size, size, true);

            var bitmap = new DirectBitmap(size, size);

            bitmap.SetPixels(colors);

            return(bitmap.Bitmap);
        }
示例#2
0
        public RayTracerTestScene()
        {
            var meshes = ThreeMFLoader.LoadFromFile(@".\data\test.3mf").ToList();
            var mesh   = meshes[0];

            Cube = new MeshObject(new Mesh(mesh.Vertices, mesh.Triangles.Select(t => new Triangle(t.Vector1, t.Vector2, t.Vector3)).ToArray(), mesh.Normals), new OpaqueMaterial(1.2f, Color.Red, .5f, .3f));
            Cube.Mesh.Normalize();
            Cube.Mesh.Rotate(MathF.PI / 4, MathF.PI / 4, 0);

            var sphereMesh = ProceduralSphere.GetSphereMesh(1f, 1);

            SphereCenter = new Vector3(0, 0, 3.5f);
            Sphere       = new MeshObject(sphereMesh, new OpaqueMaterial(1.2f, Color.Yellow, .5f, .3f));
            Sphere.Mesh.Move(SphereCenter);
            //Sphere.Mesh.CalculateBounds(1);

            Camera      = new RectCamera(new Vector3(-16 / 4 / 2f, -9 / 4 / 2f, -6), new Vector3(16 / 4f, 0, 0), new Vector3(0, 9 / 4f, 0), -4f);
            Scene       = new Lib.RayTracerScene(Color.BlueViolet, .3f);
            LightSource = new SphericalLightSource(new Vector3(5, -5, -5), 1f);

            Scene.LightSources.Add(LightSource);
            Scene.Objects.Add(Cube);
            Scene.Objects.Add(Sphere);
        }