public static void Chapter5Challenge() { //Create an image of a sphere by only testing for hits or misses. RT.Mat4 transMatrix = new RT.Mat4(); RT.Scene scene = new RT.Scene(); //transMatrix = RT.Mat4.ScaleMatrix(1,0.5f,1); //transMatrix = RT.Mat4.ScaleMatrix(0.5f,1,1); //transMatrix = RT.Mat4.RotateMatrix(0.0f, 0.0f, RT.Constants.pi * 0.25f) * RT.Mat4.ScaleMatrix(1,0.5f,1); transMatrix = RT.Mat4.ShearMatrix(1, 0, 0, 0, 0, 0) * RT.Mat4.ScaleMatrix(0.5f, 1, 1); int resolution = 200; RT.Canvas canvas = new RT.Canvas(resolution, resolution); canvas.FillCanvas(RT.Color.black); RT.Sphere sphere = new RT.Sphere(); sphere.SetMatrix(transMatrix); RT.Point camera = new RT.Point(0, 0, -5); //Use the wall x and y as the width and height and the position of the wall as the z value RT.Point wall = new RT.Point(0.0f, 0.0f, 7f); double wallSize = 7.0f; //Camera is the start point, rays are created by taking iterating over the wall in resultion steps //vertically and horizontally, calc wall - camera to get direction of camera to wall location. //Check if the ray hits the sphere, if it does draw red if it does not draw black. for (int y = 0; y < resolution; y++) { for (int x = 0; x < resolution; x++) { //Need to start at half the width over from the walls origin and increment from there double increment = wallSize / resolution; RT.Vector currentWallPixel = wall - new RT.Point((wallSize * 0.5f) - x * increment, (wallSize * 0.5f) - y * increment, wall.z); //This presents a problem when I want to convert a point to a vector... RT.Point point = (currentWallPixel - camera); RT.Vector direction = new RT.Vector(point).Normalize(); RT.Ray ray = new RT.Ray(camera, direction); RT.Intersection hit = RT.Scene.current.Hit(scene.Intersections(ray)); if (hit != null) { canvas.SetPixel(x, y, RT.Color.red); } } } RT.Save.SaveCanvas(canvas, "Chapter5Challenge"); }
public Environment(RT.Vector gravity, RT.Vector wind) { this.gravity = gravity; this.wind = wind; }
public Projectile(RT.Point position, RT.Vector velocity) { this.position = position; this.velocity = velocity; }