public static Scene GeometricFiguresBox() { var cameraPosition = new Vector3(0, 8, 5); var camera = new Camera(cameraPosition, Quaternion.LookRotation(new Vector3(0, -1, -1), Vector3.Up), 8.0f / 6.0f, (float)Math.PI * 60f / 180f); ISampler smooth = new InterpolatedNormalSampler(); ISampler flat = new FlatNormalSampler(); Shader diffuseRedSmooth = new DiffuseShader(new SolidColorSampler(Color.Red)); Shader diffuseSilver = new DiffuseShader(new SolidColorSampler(Color.Silver)); Shader diffuseWhite = new DiffuseShader(new SolidColorSampler(Color.White)); Shader diffuseGreenSmooth = new DiffuseShader(new SolidColorSampler(Color.Green)); Shader glossy = new GlossyShader(); Shader mirror = new MixShader(diffuseSilver, glossy, 0.6f); Shader cubeShader = new MixShader(diffuseWhite, glossy, 0.6f); Shader smallSphereShader = new MixShader(diffuseGreenSmooth, glossy, 0.4f); Mesh sphere = TriangleSphere.Create( new Vector3(3, 2, -6), Quaternion.Identity, 2, 32, 40, diffuseRedSmooth, smooth); Mesh smallSphere = TriangleSphere.Create( new Vector3(-2, 1, -4), Quaternion.Identity, 1, 26, 20, smallSphereShader, smooth); Mesh cube = Cube.Create( new Vector3(-2.9f, 1.5f, -8), new Quaternion(0, 1, 0, 0.33f).Normalized(), 3, cubeShader, flat); Mesh backWall = Plane.Create( new Vector3(0, 0, -10), Quaternion.Identity, Vector3.Down, Vector3.Right, 100, diffuseSilver, flat); Mesh frontWall = Plane.Create( new Vector3(0, 0, 6), Quaternion.Identity, Vector3.Up, Vector3.Right, 100, diffuseSilver, flat); Mesh floor = Plane.Create( new Vector3(0, 0, 0), Quaternion.Identity, Vector3.Forward, Vector3.Right, 100, diffuseSilver, flat); Mesh ceiling = Plane.Create( new Vector3(0, 10, 0), Quaternion.Identity, Vector3.Forward, Vector3.Left, 100, diffuseSilver, flat); Mesh leftWall = Plane.Create( new Vector3(-5, 0, 0), Quaternion.Identity, Vector3.Forward, Vector3.Down, 100, mirror, flat); Mesh rightWall = Plane.Create( new Vector3(5, 0, 0), Quaternion.Identity, Vector3.Forward, Vector3.Up, 100, mirror, flat); var meshes = new List<Mesh> { cube, sphere, smallSphere, backWall, frontWall, floor, ceiling, leftWall, rightWall }; LightSource cameraLightSource = new PointLight(cameraPosition, 3, 10, Color.White); var lightSources = new List<LightSource> { new PointLight(new Vector3(-4.5f, 7.5f, -9.5f), 2.0f, 5, Color.White), new PointLight(new Vector3(4.5f, 7.5f, -9.5f), 2.0f, 5, Color.White), cameraLightSource }; return new Scene(meshes, lightSources, camera, Color.White); }
public static Scene Spheres() { var cameraPosition = new Vector3(0, 1, 0); var camera = new Camera(cameraPosition, Quaternion.Identity, 8.0f / 6.0f, (float)Math.PI * 80f / 180f); ISampler smoothSampler = new InterpolatedNormalSampler(); ISampler flatSampler = new FlatNormalSampler(); Shader grayDiffuse = new DiffuseShader(new SolidColorSampler(Color.DarkSlateGray)); Shader glossyShader = new GlossyShader(); Shader floorShader = new MixShader(grayDiffuse, glossyShader, 0.8f); Mesh floor = Plane.Create(Vector3.Zero, Quaternion.Identity, Vector3.Forward, Vector3.Right, 100, floorShader, flatSampler); var meshes = new List<Mesh> { floor }; var radiuses = new List<double> {1, 0.2, 1, 4, 1.1, 0.6, 0.9}; var positions = new List<Vector2> { new Vector2(-6, 5), new Vector2(-0.2f, 2), new Vector2(-2f, 3.6f), new Vector2(-1f, 14), new Vector2(2, 3), new Vector2(0.7f, 2.5f), new Vector2(6, 13) }; var colors = new List<Color> { Color.Green, Color.LightSeaGreen, Color.DarkOrange, Color.Orchid, Color.Blue, Color.White, Color.DarkViolet }; for (int i = 0; i < 7; i++) { Shader shader = new MixShader(new DiffuseShader(new SolidColorSampler(colors[i])), new GlossyShader(), 0.7f); meshes.Add( TriangleSphere.Create( new Vector3(positions[i].x, (float) radiuses[i], positions[i].y), Quaternion.Identity, radiuses[i], 16, 16, shader, smoothSampler)); } var lights = new List<LightSource> { new DirectionalLight(2, Color.White, new Vector3(0.3f, -1f, 0.3f)), new PointLight(cameraPosition, 1, 10, Color.White) }; return new Scene(meshes, lights, camera, Color.Black); }
private void WrapMesh() { Mesh newMesh; ISampler normalSampler; if (_useSmoothShading) { normalSampler = new InterpolatedNormalSampler(); } else { normalSampler = new FlatNormalSampler(); } if (_uvMapped) { newMesh = new Mesh(_vertices.ToArray(), _triangles.ToArray(), _uvs.ToArray(), Vector3.Zero, Quaternion.Identity, new DiffuseShader(new BitmapSampler(_materials[_currentMaterialName])), normalSampler); } else { newMesh = new Mesh(_vertices.ToArray(), _triangles.ToArray(), Vector3.Zero, Quaternion.Identity, new DiffuseShader(new SolidColorSampler(Color.Red)), normalSampler); } Meshes.Add(newMesh); InitBuffers(); }