public Action<Vector3, bool>[] CreateRenderables(int count) { var ids = Dynamight.ImageProcessing.CameraCalibration.Range.OfInts(count); objects = ids.Select(_ => new Renderable() { Shape = new Quad(new Vector3(0, 0.0f, 0f), 0.25f, defaultE1, defaultE2, (v) => textures.Transform(v, 0)), Animatable = translator = new Translator() // new RadialSpin(new Vector3(0.2f,0,0)) }).ToArray(); renderer = new Renderer(null, objects); renderer.Load(); renderer.Start(); return ids.Select(i => { return (Action<Vector3, bool>)((v, visible) => { var r = objects[i]; (r.Animatable as Translator).SetPosition(v); r.Visible = visible; }); }).ToArray(); }
public override void Load(ProgramWindow parent) { parent.MakeCurrent(); base.Load(parent); GL.Disable(EnableCap.Dither); GL.Enable(EnableCap.Texture2D); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.DstAlpha); GL.ClearColor(System.Drawing.Color.FromArgb(0,0,0,0)); var vs = parent.CreateShader(ShaderType.VertexShader, VSLighting); var fs = parent.CreateShader(ShaderType.FragmentShader, FSLighting); program = parent.CreateProgram(vs, fs); GL.DeleteShader(vs); GL.DeleteShader(fs); dynamicProgram.Load(); textures = new MultipleTextures(this); Bitmap white = new Bitmap(101, 101); QuickDraw.Start(white) .Fill(Color.White).Finish(); Bitmap gridBot = new Bitmap(101, 101); QuickDraw.Start(gridBot) .All((x, y) => { var lpp = 10; var xm = x % lpp; var ym = y % lpp; if (xm == 0 || ym == 0) return Color.Gray; return Color.FromArgb(150, 50, 50, 50); }, false).Finish(); Bitmap[] maps = new Bitmap[] { white, gridBot }; textures.Load(maps); if (lightStudio != null) lights = lightStudio.Lights; else lights = new MoveableLights(8); dynamicRenderer = new Renderer(dynamics = (Dynamight.ImageProcessing.CameraCalibration.Range.OfInts(6)).Select(_ => new DynamicRenderable()).ToArray()); staticRenderer = new Renderer(null, (new Renderable[] { Grid = new Renderable() { Visible = false, Shape = new Quad(new Vector3(0,0,0), 10, new Vector3(1,0,0), new Vector3(0,0,1), (v) => textures.Transform(v, 1)), Animatable = new Translator() }, }).Concat(LightsObjects = lights.Select(l => new LightRenderable(l, (v) => textures.Transform(v, 0))).ToArray()).ToArray()); windowSize = parent.Size; SetupCamera(); staticRenderer.Load(); dynamicRenderer.Load(); staticRenderer.Start(); dynamicRenderer.Start(); keyl = new KeyboardListener(parent.Keyboard); keyl.AddAction(() => Selection = (Selection == null ? (int?)1 : null), Key.C); keyl.AddAction(() => Grid.Visible = !Grid.Visible, Key.G); keyl.AddBinaryAction(0.01f, -0.01f, Key.Right, Key.Left, null, (f) => MoveX(f)); keyl.AddBinaryAction(0.01f, -0.01f, Key.Down, Key.Up, null, (f) => MoveY(f)); keyl.AddBinaryAction(0.01f, -0.01f, Key.Down, Key.Up, new Key[] { Key.ShiftLeft }, (f) => MoveZ(f)); keyl.AddBinaryAction(0.05f, -0.05f, Key.Right, Key.Left, new Key[] { Key.ControlLeft }, (f) => MoveX(f)); keyl.AddBinaryAction(0.05f, -0.05f, Key.Down, Key.Up, new Key[] { Key.ControlLeft }, (f) => MoveY(f)); keyl.AddBinaryAction(0.05f, -0.05f, Key.Down, Key.Up, new Key[] { Key.ShiftLeft, Key.ControlLeft }, (f) => MoveZ(f)); GL.Enable(EnableCap.Lighting); GL.Enable(EnableCap.Light0); GL.Enable(EnableCap.Light1); GL.Enable(EnableCap.Light2); GL.Enable(EnableCap.Light3); GL.Enable(EnableCap.Light4); GL.Enable(EnableCap.Light5); GL.Enable(EnableCap.Light6); GL.Enable(EnableCap.Light7); }
public override void Load(ProgramWindow parent) { base.Load(parent); // Setup parameters for Points GL.Enable(EnableCap.Blend); GL.Disable(EnableCap.DepthTest); GL.Enable(EnableCap.CullFace); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.CullFace(CullFaceMode.Back); textures = new MultipleTextures(this); Bitmap[] maps = new Bitmap[4]; { var bitmap = new Bitmap(300, 300); QuickDraw.Start(bitmap).All((xp, yp) => { var x = 0.5 - xp; var y = 0.5 - yp; var i = Math.Sqrt(x * x + y * y); if (i > 1) i = 1; i = Math.Pow(1 - i, 1); i += 0.4; if (i > 1) i = 1; else i = Math.Pow(i, 29); byte ii = (byte)(i * 255); return Color.FromArgb(ii, 245, 150, 135); }).Finish(); maps[0] = bitmap; } { var bitmap = new Bitmap(300, 300); QuickDraw.Start(bitmap).All((xp, yp) => { var x = 0.5 - xp; var y = 0.5 - yp; var i = Math.Sqrt(x * x + y * y); i = (Math.Sin(i * Math.PI * 8) + 1) / 2.0; byte ii = (byte)(i * 255); return Color.FromArgb(ii, 245, 150, 135); }).Finish(); maps[1] = bitmap; maps[2] = bitmap; maps[3] = bitmap; } textures.Load(maps); renderer = new Renderer(); }