private void ControllerDraw(Controller3D mc, ulong unused) { ((GLMatrixCalcUniformBlock)items.UB("MCUB")).Set(gl3dcontroller.MatrixCalc); // set the matrix unform block to the controller 3d matrix calc. IGLRenderableItem i = rObjects["DYNGRIDRENDER"]; DynamicGridVertexShader s = items.PLShader("PLGRIDVertShader") as DynamicGridVertexShader; if (Math.Abs(lasteyedistance - gl3dcontroller.MatrixCalc.EyeDistance) > 10) // a little histerisis { i.InstanceCount = s.ComputeGridSize(gl3dcontroller.MatrixCalc.EyeDistance, out lastgridwidth); lasteyedistance = gl3dcontroller.MatrixCalc.EyeDistance; } s.SetUniforms(gl3dcontroller.MatrixCalc.LookAt, lastgridwidth, i.InstanceCount); DynamicGridCoordVertexShader bs = items.PLShader("PLGRIDBitmapVertShader") as DynamicGridCoordVertexShader; bs.ComputeUniforms(lastgridwidth, gl3dcontroller.MatrixCalc, gl3dcontroller.PosCamera.CameraDirection, Color.Yellow, Color.Transparent); solmarker.Position = gl3dcontroller.MatrixCalc.LookAt; solmarker.Scale = gl3dcontroller.MatrixCalc.EyeDistance / 20; rObjects.Render(glwfc.RenderState, gl3dcontroller.MatrixCalc); this.Text = "Looking at " + gl3dcontroller.MatrixCalc.LookAt + " eye@ " + gl3dcontroller.MatrixCalc.EyePosition + " dir " + gl3dcontroller.PosCamera.CameraDirection + " Dist " + gl3dcontroller.MatrixCalc.EyeDistance + " Zoom " + gl3dcontroller.PosCamera.ZoomFactor; }
private void ControllerDraw(Controller3D c3d, ulong unused) { ((GLMatrixCalcUniformBlock)items.UB("MCUB")).Set(gl3dcontroller.MatrixCalc); // set the matrix unform block to the controller 3d matrix calc. IGLRenderableItem i = rObjects["DYNGRIDRENDER"]; DynamicGridVertexShader s = items.PLShader("PLGRIDVertShader") as DynamicGridVertexShader; if (Math.Abs(lasteyedistance - gl3dcontroller.MatrixCalc.EyeDistance) > 10) // a little histerisis { i.InstanceCount = s.ComputeGridSize(gl3dcontroller.MatrixCalc.EyeDistance, out lastgridwidth); lasteyedistance = gl3dcontroller.MatrixCalc.EyeDistance; } s.SetUniforms(gl3dcontroller.MatrixCalc.LookAt, lastgridwidth, i.InstanceCount); float dist = c3d.MatrixCalc.EyeDistance; float d1 = dist - lastgridwidth; float suc = d1 / (9.0f * lastgridwidth); float cf = 1.0f - suc.Clamp(0f, 1f); float a = 0.7f * cf; float coordfade = lastgridwidth == 10000 ? (0.7f - (c3d.MatrixCalc.EyeDistance / 20000).Clamp(0.0f, 0.7f)) : 0.7f; Color coordscol = Color.FromArgb(coordfade < 0.05 ? 0 : 150, Color.Cyan); System.Diagnostics.Debug.WriteLine("Dist {0} grid {1} suc {2} cf {3} a {4} coord {5} {6}", dist, lastgridwidth, suc, cf, a, coordfade, coordscol); DynamicGridCoordVertexShader bs = items.PLShader("PLGRIDBitmapVertShader") as DynamicGridCoordVertexShader; bs.ComputeUniforms(lastgridwidth, gl3dcontroller.MatrixCalc, gl3dcontroller.PosCamera.CameraDirection, coordscol, Color.Transparent); if (galaxy != null) { galaxy.InstanceCount = volumetricblock.Set(gl3dcontroller.MatrixCalc, boundingbox, 50.0f); // set up the volumentric uniform IGLProgramShader p = items.Shader("Galaxy"); var fsgalaxy = p.GetShader(OpenTK.Graphics.OpenGL4.ShaderType.FragmentShader) as GalaxyFragmentPipeline; fsgalaxy.SetFader(c3d.MatrixCalc.EyeDistance); } rObjects.Render(glwfc.RenderState, gl3dcontroller.MatrixCalc); this.Text = "Looking at " + gl3dcontroller.MatrixCalc.LookAt + " eye@ " + gl3dcontroller.MatrixCalc.EyePosition + " dir " + gl3dcontroller.PosCamera.CameraDirection + " Dist " + gl3dcontroller.MatrixCalc.EyeDistance + " Zoom " + gl3dcontroller.PosCamera.ZoomFactor; }