using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using OpenTK; using OpenTK.Graphics.OpenGL; using MathNet.Numerics.LinearAlgebra.Single; namespace bbiwarg { class OutputTest : GameWindow { IVideoDataSource source; static void Main(string[] args) { OutputTest demo = new OutputTest(); demo.initSource(); demo.Run(30); } public void initSource() { source = new IIsuDataSource("..\\..\\videos\\10.skv"); source.init(); source.start(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); Title = "OutputTest"; GL.ClearColor(Color.CornflowerBlue); } protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); bool isActive = source.isActive(); if (isActive) { source.updateFrame(); } GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, -Vector3.UnitZ, Vector3.UnitY); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(ref modelview); DepthImage depthImage = source.getDepthImage(); int width = depthImage.getWidth(); int height = depthImage.getHeight(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { ushort depth = depthImage.getDepth(x, y); int depth2 = depth; //depth = 60; int relX = x - width / 2; int relY = y - height / 2; GL.Begin(BeginMode.Polygon); GL.Vertex3(relX-0.5f, relY+0.5f, -depth2); GL.Vertex3(relX+0.5f, relY+0.5f, -depth2); GL.Vertex3(relX+0.5f, relY-0.5f, -depth2); GL.Vertex3(relX-0.5f, relY-0.5f, -depth2); GL.End(); } } /* GL.Begin(BeginMode.Triangles); GL.Vertex3(0.0f, 0.0f, -4.0f); GL.Vertex3(2.0f, 0.0f, -4.0f); GL.Vertex3(0.0f, 1.0f, -4.0f); GL.End(); */ SwapBuffers(); if(isActive) { source.releaseFrame(); } /* GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(ref modelview); // triangle GL.Begin(BeginMode.Triangles); float x = palmPosition.Value._X; float y = palmPosition.Value._Y; float z = palmPosition.Value._Z; GL.Vertex3(-1.0f + x, -1.0f + z, 4.0f - 10 * y); GL.Vertex3(1.0f, -1.0f, 4.0f); GL.Vertex3(0.0f, 1.0f, 4.0f); GL.End(); SwapBuffers();*/ } protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height); Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Width / (float)Height, 1.0f, 640.0f); GL.MatrixMode(MatrixMode.Projection); GL.LoadMatrix(ref projection); } } }