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; using bbiwarg.DataSource; namespace bbiwarg.Test { class OutputTest : GameWindow { IVideoDataSource source; private List triangles = new List(); private List pixel = new List(); 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(); int width = 320; int height = 160; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { pixel.Add(new Pixel3D(x, y, width, height)); } } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); Title = "OutputTest"; GL.ClearColor(Color.Black); } 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); GL.Color3(1.0f, 1.0f, 1.0f); DepthImage depthImage = source.getDepthImage(); ConfidenceImage confidenceImage = source.getConfidenceImage(); ColorImage colorImage = source.getColorImage(); UVImage uvImage = source.getUVImage(); ImageData imageData = new ImageData(depthImage, confidenceImage, colorImage, uvImage); int width = imageData.getWidth(); int height = imageData.getHeight(); for (int i = 0; i < pixel.Count; i++) { pixel[i].depth = imageData.getDepth(pixel[i].x, pixel[i].y); pixel[i].color = imageData.getColor(pixel[i].x, pixel[i].y); pixel[i].draw(); } Vector palm = source.getPalmPosition2D(1); Vector[] fingers = source.getFingerTipPositions2D(1); Pixel3D palmPosition = new Pixel3D((int)palm[0], (int)palm[1], width, height); Pixel3D finger1Position = new Pixel3D((int)fingers[0][0], (int)fingers[0][1], width, height); palmPosition.depth = depthImage.getDepth((int)palm[0], (int)palm[1]); palmPosition.color = Color.Red; palmPosition.size = 3; palmPosition.draw(); finger1Position.depth = depthImage.getDepth((int)fingers[0][0], (int)fingers[0][1]); finger1Position.color = Color.Red; finger1Position.size = 3; finger1Position.draw(); for (int i = 0; i < triangles.Count; i++) { triangles[i].draw(); } SwapBuffers(); if (isActive) { source.releaseFrame(); } } 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/8, Width / (float)Height, 1.0f, 3000.0f); GL.MatrixMode(MatrixMode.Projection); GL.LoadMatrix(ref projection); } public void addSurface(Triangle triangle) { triangles.Add(triangle); } } }