public static RendererBase Create(Type rendererType) { RendererBase renderer = null; if (rendererType == typeof(AnalyzedPointSpriteRenderer)) { int particleCount = 10000; renderer = AnalyzedPointSpriteRenderer.Create(particleCount); } else if (rendererType == typeof(BufferBlockRenderer)) { renderer = BufferBlockRenderer.Create(); } else if (rendererType == typeof(ConditionalRenderer)) { renderer = ConditionalRenderer.Create(); } else if (rendererType == typeof(EmitNormalLineRenderer)) { var model = new Teapot(); renderer = EmitNormalLineRenderer.Create(model, Teapot.strPosition, Teapot.strNormal, model.Lengths); } else if (rendererType == typeof(ImageProcessingRenderer)) { renderer = new ImageProcessingRenderer(); } else if (rendererType == typeof(KleinBottleRenderer)) { renderer = KleinBottleRenderer.Create(new KleinBottleModel()); } else if (rendererType == typeof(OrderDependentTransparencyRenderer)) { var model = new Teapot(); renderer = OrderDependentTransparencyRenderer.Create(model, model.Lengths, Teapot.strPosition, Teapot.strColor); } else if (rendererType == typeof(OrderIndependentTransparencyRenderer)) { var model = new Teapot(); renderer = new OrderIndependentTransparencyRenderer(model, model.Lengths, Teapot.strPosition, Teapot.strColor); } else if (rendererType == typeof(ParticleSimulatorRenderer)) { renderer = new ParticleSimulatorRenderer(); } else if (rendererType == typeof(PointCloudRenderer)) { var list = new List <vec3>(); using (var reader = new StreamReader(@"Resources\data\19PointCloud.txt")) { while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] parts = line.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); float x = float.Parse(parts[0]); float y = float.Parse(parts[1]); float z = float.Parse(parts[2]); list.Add(new vec3(x, y, z)); } } renderer = PointCloudRenderer.Create(new PointCloudModel(list)); } else if (rendererType == typeof(PointSpriteRenderer)) { const int particleCount = 10000; renderer = PointSpriteRenderer.Create(particleCount); } else if (rendererType == typeof(RaycastVolumeRenderer)) { renderer = new RaycastVolumeRenderer(); } else if (rendererType == typeof(RayTracingRenderer)) { renderer = RayTracingRenderer.Create(); } else if (rendererType == typeof(ShaderToyRenderer)) { renderer = ShaderToyRenderer.Create(); } else if (rendererType == typeof(SimpleComputeRenderer)) { renderer = SimpleComputeRenderer.Create(); } else if (rendererType == typeof(SimplexNoiseRenderer)) { renderer = SimplexNoiseRenderer.Create(); } else if (rendererType == typeof(UniformArrayRenderer)) { renderer = UniformArrayRenderer.Create(); } else if (rendererType == typeof(UniformBlockRenderer)) { renderer = UniformBlockRenderer.Create(); } else if (rendererType == typeof(UniformStructRenderer)) { renderer = UniformStructRenderer.Create(); } else if (rendererType == typeof(WaterRenderer)) { renderer = WaterRenderer.Create(waterPlaneLength: 4); } else if (rendererType == typeof(ZeroAttributeRenderer)) { renderer = ZeroAttributeRenderer.Create(); } return(renderer); }