public static Scene Scene(Scene.AccelerationStructure accelerationStructure = Raytracing.Scene.AccelerationStructure.BVH) { int n = 20; List <ISceneObject> sceneObjects = new List <ISceneObject>(); Random random = new Random(); for (int k = 0; k < 3; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Vector3 diffuse = random.NextVector3(); Vector3 specular = new Vector3(0.1f, 0.1f, 0.1f); Material material = new Material(diffuse, specular); Vector3 position = new Vector3((6f / n) * i - 2f, (6f / n) * j - 2f, k * 0.5f - 0.5f); float r = (6f / n) * (0.95f / 2); sceneObjects.Add(new Sphere(position, r, material)); } } } sceneObjects.Add(new Sphere(new Vector3(0, 0, 1003f), 1000, new Material(Colour.White, new Vector3(0.1f, 0.1f, 0.1f)))); LightSource[] lightSources = new LightSource[] { new LightSource(new Vector3(-1, -1, -2), Colour.White) }; return(new Scene(sceneObjects, lightSources, accelerationStructure)); }
public static PathtracingScene Scene(Scene.AccelerationStructure accelerationStructure = Raytracing.Scene.AccelerationStructure.None) { Material whiteMaterial = new Material(Colour.White * 0.9f, Colour.Black, Colour.Black); var cornellBoxSpheres = new List <ISceneObject> { new Sphere(new Vector3(1001, 0, 0), 1000, new Material(Colour.Red * 0.9f, Colour.Black)), new Sphere(new Vector3(-1001, 0, 0), 1000, new Material(Colour.Blue * 0.9f, Colour.Black)), new Sphere(new Vector3(0, 0, 1001), 1000, whiteMaterial), new Sphere(new Vector3(0, -1001, 0), 1000, whiteMaterial), new Sphere(new Vector3(0, 1001, 0), 1000, whiteMaterial), new Sphere(new Vector3(0, 0, -1005), 1000, whiteMaterial), new Sphere(new Vector3(0.6f, 0.7f, -0.6f), 0.3f, new Material(Colour.Yellow * 0.9f, Colour.Black)), new Sphere(new Vector3(-0.3f, 0.4f, 0.3f), 0.6f, new Material(Colour.LightCyan * 0.9f, Colour.Black, Colour.Black)), new Sphere(new Vector3(0, -10.99f, 0), 10, new Material(Colour.Black, Colour.Black, Colour.White * 0.6f)) }; SceneObjectList sceneObjects = new SceneObjectList(cornellBoxSpheres); return(new PathtracingScene(sceneObjects)); }