Beispiel #1
0
        static void Main(string[] args)
        {
            Camera camera = new Camera(0, 0, Vector3D.Zero);
            World world = new World(camera, new Viewport(640, 640));

            BasicMaterialProperties bmp1 = new BasicMaterialProperties(Color.Red, 0.2f, 0.8f);
            BasicMaterialProperties bmp2 = new BasicMaterialProperties(Color.Blue, 0.2f, 0.8f);
            BasicMaterialProperties bmp3 = new BasicMaterialProperties(Color.White, 0.2f, 0.8f);
            Material red = new Material(bmp1, true, world);
            Material blue = new Material(bmp2, true, world);
            Material white = new Material(bmp3, true, true, 3f, world);
            SceneObject s1 = new SceneObject(new Sphere(50, new Vector3D(50, 0, 100)), red);
            SceneObject s2 = new SceneObject(new Sphere(50, new Vector3D(0, -30, 100)), white);
            SceneObject s3 = new SceneObject(new Sphere(50, new Vector3D(-50, 0, 100)), blue);
            BasicMaterialProperties bmp4 = new BasicMaterialProperties(Color.White, 0, 1);
            Material green = new Material(bmp4, true, world);
            SceneObject pl = new SceneObject(new CircularFrame(new Vector3D(0, 0, 180), 200,
                new Plane(new Vector3D(0, 0, 160), new Vector3D(0, 1, 1))), green);

            world.AddLight(new Light(new Vector3D(0, 60, 100f)));
            world.AddSceneObject(s1);
            world.AddSceneObject(s2);
            world.AddSceneObject(s3);
            world.AddSceneObject(pl);

            world.Render().Save("rendered3.png");
        }
Beispiel #2
0
        private Ray GetReflectedRay(Ray r, SceneObject hitObject)
        {
            Vector3D n = hitObject.Geometry.GetNormalAtPoint(hitObject.Material.Hitpoint);
            float k = (-1f) * r.Direction * n;

            return new Ray(hitObject.Material.Hitpoint, r.Direction + (2 * k * n), hitObject);
        }
Beispiel #3
0
        private Ray GetRefractedRay(Ray r, SceneObject hitObject)
        {
            Vector3D n = hitObject.Geometry.GetNormalAtPoint(hitObject.Material.Hitpoint);
            float n1 = r.ObjectAtEmission.Material.RefractiveIndex;
            float n2 = hitObject.Material.RefractiveIndex;
            float ri = n1 / n2;
            float c1 = -(n * r.Direction);
            float c2 = (float)Math.Sqrt(1f - ri * ri * (1f - c1 * c1));
            Vector3D dir = (ri * r.Direction) + (ri * c1 - c2) * n;

            return new Ray(hitObject.Material.Hitpoint, dir, hitObject);
        }
Beispiel #4
0
 public void AddSceneObject(SceneObject so)
 {
     sceneObjects.Add(so);
 }
Beispiel #5
0
 public Ray(Vector3D origin, Vector3D direction, SceneObject objectAtEmission)
 {
     this.origin = origin;
     this.direction = direction;
     this.emissionObject = objectAtEmission;
 }
Beispiel #6
0
 public Ray(Vector3D origin, Vector3D direction)
 {
     this.origin = origin;
     this.direction = direction;
     this.emissionObject = SceneObject.Air;
 }