private void ControllerDraw(Controller3D mc, ulong unused) { items.Get <GLMatrixCalcUniformBlock>("MCUB").Set(gl3dcontroller.MatrixCalc); // set the matrix unform block to the controller 3d matrix calc. if (noisebox != null) { noisebox.InstanceCount = volumetricblock.Set(gl3dcontroller.MatrixCalc, boundingbox, 10.0f); // set up the volumentric uniform } dataoutbuffer.ZeroBuffer(); atomicbuffer.ZeroBuffer(); rObjects.Render(glwfc.RenderState, gl3dcontroller.MatrixCalc); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); Vector4[] databack = dataoutbuffer.ReadVector4s(0, 10); //System.Diagnostics.Debug.WriteLine("avg {0} txtavg {1}", databack[0].ToStringVec(), databack[1].ToStringVec()); for (int i = 0; i < databack.Length; i += 1) { // System.Diagnostics.Debug.WriteLine("db " + databack[i].ToStringVec()); } 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 mc, ulong unused) { ((GLMatrixCalcUniformBlock)items.UB("MCUB")).Set(gl3dcontroller.MatrixCalc); // set the matrix unform block to the controller 3d matrix calc. pointblock.StartWrite(0, pointblock.Length); float minzv = float.MaxValue, maxzv = float.MinValue; for (int i = 0; i < 8; i++) { Vector4 p = Vector4.Transform(boundingbox[i], mc.MatrixCalc.ModelMatrix); if (p.Z < minzv) { minzv = p.Z; } if (p.Z > maxzv) { maxzv = p.Z; } pointblock.Write(p); } pointblock.Write(minzv); pointblock.Write(maxzv); pointblock.Write(Vector4.Transform(new Vector4(mc.MatrixCalc.EyePosition, 0), mc.MatrixCalc.ModelMatrix)); float slicedist = (maxzv - minzv) / (float)slices; float slicestart = (maxzv - minzv) / ((float)slices * 2); pointblock.Write(slicestart); //slicestart pointblock.Write(slicedist); //slicedist // System.Diagnostics.Debug.WriteLine("slice start {0} dist {1}", slicestart, slicedist); // for (int ic = 0; ic < slices; ic++) // System.Diagnostics.Debug.WriteLine("slice {0} {1} {2}", minzv, maxzv, minzv + slicestart + slicedist * ic); pointblock.StopReadWrite(); dataoutbuffer.ZeroBuffer(); atomicbuffer.ZeroBuffer(); rObjects.Render(glwfc.RenderState, gl3dcontroller.MatrixCalc); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); Vector4[] databack = dataoutbuffer.ReadVector4s(0, 5); // System.Diagnostics.Debug.WriteLine("avg {0} txtavg {1}", databack[0].ToStringVec(), databack[1].ToStringVec()); for (int i = 0; i < databack.Length; i += 1) { // System.Diagnostics.Debug.WriteLine("db "+databack[i].ToStringVec()); } this.Text = "Looking at " + gl3dcontroller.MatrixCalc.LookAt + " dir " + gl3dcontroller.PosCamera.CameraDirection + " eye@ " + gl3dcontroller.MatrixCalc.EyePosition + " Dist " + gl3dcontroller.MatrixCalc.EyeDistance; }
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. dataoutbuffer.ZeroBuffer(); atomicbuffer.ZeroBuffer(); rObjects.Render(glwfc.RenderState, gl3dcontroller.MatrixCalc); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); Vector4[] databack = dataoutbuffer.ReadVector4s(0, 2); for (int i = 0; i < databack.Length; i++) { System.Diagnostics.Debug.WriteLine(i + " = " + databack[i].ToString()); } this.Text = "Looking at " + gl3dcontroller.MatrixCalc.LookAt + " dir " + gl3dcontroller.PosCamera.CameraDirection + " eye@ " + gl3dcontroller.MatrixCalc.EyePosition + " Dist " + gl3dcontroller.MatrixCalc.EyeDistance; }