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); }
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); }