// tick: renders one frame public void Tick() { screen.Clear(0); render.Print("Dit is raytracer, niet game! Kusje, Laura", 2, 2, 0xffffff); // geef camera weer op scherm //debug.Box(camera.location[0], camera.location[2], camera.location[0] + 0.1f, camera.location[2] + 0.1f, CreateColor(255,255,255)); List <primitive> primitieven = scene.getprimitives(); int color; int teller = 0; foreach (primitive primitieve in primitieven) { if (teller > 3) { teller = 0; } switch (teller) { case 0: color = CreateColor(255, 0, 0); // red break; case 1: color = CreateColor(0, 255, 0); // green break; case 2: color = CreateColor(0, 0, 255); // blue break; case 3: color = CreateColor(255, 0, 255); // pink?? break; default: color = CreateColor(255, 255, 255); // white break; } if (primitieve.GetType().Equals(typeof(plane))) { plane screenplane = (plane)primitieve; // vanuit positie camera en richting camera en FOV (hoek) en afstand camera tot scherm // (FOV is nu 90) // bepaal je de lengte van het scherm. float[] middenscreenplane = new float[3]; middenscreenplane = nieuwelocatie(camera.location, screenplane.distancetoorigin, camera.direction); float lengtehalfscherm = (float)(Math.Tan(45) * screenplane.distancetoorigin); float[] punt1 = nieuwelocatie(middenscreenplane, lengtehalfscherm, nieuwerichting(camera.direction, 1)); float[] punt2 = nieuwelocatie(middenscreenplane, lengtehalfscherm, nieuwerichting(camera.direction, 0)); debug.Line(0, punt1[2], punt2[0], punt2[2], CreateColor(0, 255, 0)); // op basis van de lengte van het scherm en de normaal (of de kijkrichting) bepaal je // de uiterste punten van de plane, zowel x, y als z // met x en z teken je de plane als een lijn op je scherm //debug.Plane(plane.position,plane.width,plane.height, color); teller++; } else if (primitieve.GetType().Equals(typeof(sphere))) { sphere bol = (sphere)primitieve; debug.Circle(bol.position[0], bol.position[2], bol.radius, color); teller++; } } render.CopyTo(screen, 0, 0); debug.CopyTo(screen, 512, 0); // TODO teken hier de spheres: links in 3d en rechts in 2d bovenaanzicht }