|
@@ -10,6 +10,8 @@ using OpenTK.Graphics.OpenGL;
|
|
|
using bbiwarg.Images;
|
|
|
using bbiwarg.Detectors.Touch;
|
|
|
|
|
|
+using Emgu.CV;
|
|
|
+
|
|
|
namespace bbiwarg.Graphics
|
|
|
{
|
|
|
class OutputWindow : GameWindow
|
|
@@ -17,16 +19,19 @@ namespace bbiwarg.Graphics
|
|
|
private VideoHandle videoHandle;
|
|
|
private uint depthTextureID;
|
|
|
private uint edgeTextureID;
|
|
|
+ private uint kalmanDemoTextureID;
|
|
|
private bool paused = false;
|
|
|
private long timeSpacePressed, timeLeftPressed, timeRightPressed;
|
|
|
private Stopwatch watch;
|
|
|
+ private KalmanDemo kalmanDemo;
|
|
|
|
|
|
public OutputWindow(VideoHandle videoHandle)
|
|
|
- : base(3 * videoHandle.Width, 2 * videoHandle.Height)
|
|
|
+ : base(4 * videoHandle.Width, 2 * videoHandle.Height)
|
|
|
{
|
|
|
this.videoHandle = videoHandle;
|
|
|
watch = new Stopwatch();
|
|
|
watch.Start();
|
|
|
+ kalmanDemo = new KalmanDemo();
|
|
|
}
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
@@ -56,6 +61,13 @@ namespace bbiwarg.Graphics
|
|
|
GL.BindTexture(TextureTarget.Texture2D, edgeTextureID);
|
|
|
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
|
|
|
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
|
|
|
+
|
|
|
+ //kalman demo texture
|
|
|
+ GL.GenTextures(1, out kalmanDemoTextureID);
|
|
|
+ GL.BindTexture(TextureTarget.Texture2D, kalmanDemoTextureID);
|
|
|
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
|
|
|
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
@@ -131,9 +143,19 @@ namespace bbiwarg.Graphics
|
|
|
foreach (PalmTouchEvent ev in videoHandle.getTouchEvents())
|
|
|
{
|
|
|
Console.WriteLine("touch at " + ev.Position + " -> " + ev.RelativePalmPosition);
|
|
|
+ //touchVisualizer.addTouchEvent(ev);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // kalman demo
|
|
|
+ int mouseX = Mouse.X - (2 * Width) / 3 - 30;
|
|
|
+ int mouseY = Mouse.Y - 85;
|
|
|
+ if (mouseX >= 0 && mouseX <= videoHandle.Width && mouseY >= 0 && mouseY <= Height)
|
|
|
+ kalmanDemo.addPoint(new Point(mouseX, mouseY));
|
|
|
+ // reset with right click
|
|
|
+ if (OpenTK.Input.Mouse.GetState().IsButtonDown(OpenTK.Input.MouseButton.Right))
|
|
|
+ kalmanDemo.reset();
|
|
|
+
|
|
|
//draw textures
|
|
|
Int16[] depthTextureData = new Int16[3 * videoHandle.Width * videoHandle.Height];
|
|
|
Int16[] edgeTextureData = new Int16[3 * videoHandle.Width * videoHandle.Height];
|
|
@@ -204,8 +226,6 @@ namespace bbiwarg.Graphics
|
|
|
green = (Int16)(green / 2);
|
|
|
blue = (Int16)(blue / 2);
|
|
|
break;
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
depthTextureData[index] = red;
|
|
@@ -229,31 +249,45 @@ namespace bbiwarg.Graphics
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ float size = 0.5f;
|
|
|
+ float size_2 = size / 2.0f;
|
|
|
+ float size_1_5 = 1.5f * size;
|
|
|
+ float gap = 0.0f;
|
|
|
+
|
|
|
+ GL.Enable(EnableCap.Texture2D);
|
|
|
+ GL.BindTexture(TextureTarget.Texture2D, edgeTextureID);
|
|
|
+ GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, videoHandle.Width, videoHandle.Height, 0, PixelFormat.Rgb, PixelType.Short, edgeTextureData);
|
|
|
+ GL.Begin(PrimitiveType.Quads);
|
|
|
+ GL.Color3(1.0, 1.0, 1.0);
|
|
|
+ GL.TexCoord2(0.0, 0.0); GL.Vertex3(-size_1_5 - gap, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 0.0); GL.Vertex3(-size_2 - gap, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 1.0); GL.Vertex3(-size_2 - gap, -size_2, -0.5);
|
|
|
+ GL.TexCoord2(0.0, 1.0); GL.Vertex3(-size_1_5 - gap, -size_2, -0.5);
|
|
|
+ GL.End();
|
|
|
+
|
|
|
GL.Enable(EnableCap.Texture2D);
|
|
|
GL.BindTexture(TextureTarget.Texture2D, depthTextureID);
|
|
|
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, videoHandle.Width, videoHandle.Height, 0, PixelFormat.Rgb, PixelType.Short, depthTextureData);
|
|
|
- float size = 0.5f;
|
|
|
- float size_2 = (float)(size / 2.0f);
|
|
|
GL.Begin(PrimitiveType.Quads);
|
|
|
GL.Color3(1.0, 1.0, 1.0);
|
|
|
- GL.TexCoord2(0.0, 0.0); GL.Vertex3(0, size_2, -0.5);
|
|
|
- GL.TexCoord2(1.0, 0.0); GL.Vertex3(size, size_2, -0.5);
|
|
|
- GL.TexCoord2(1.0, 1.0); GL.Vertex3(size, -size_2, -0.5);
|
|
|
- GL.TexCoord2(0.0, 1.0); GL.Vertex3(0, -size_2, -0.5);
|
|
|
+ GL.TexCoord2(0.0, 0.0); GL.Vertex3(-size_2, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 0.0); GL.Vertex3( size_2, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 1.0); GL.Vertex3( size_2, -size_2, -0.5);
|
|
|
+ GL.TexCoord2(0.0, 1.0); GL.Vertex3(-size_2, -size_2, -0.5);
|
|
|
GL.End();
|
|
|
|
|
|
GL.Enable(EnableCap.Texture2D);
|
|
|
- GL.BindTexture(TextureTarget.Texture2D, edgeTextureID);
|
|
|
- GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, videoHandle.Width, videoHandle.Height, 0, PixelFormat.Rgb, PixelType.Short, edgeTextureData);
|
|
|
+ GL.BindTexture(TextureTarget.Texture2D, kalmanDemoTextureID);
|
|
|
+ GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, videoHandle.Width, videoHandle.Height, 0, PixelFormat.Rgb, PixelType.Short,
|
|
|
+ kalmanDemo.getTextureData(videoHandle.Width, videoHandle.Height));
|
|
|
GL.Begin(PrimitiveType.Quads);
|
|
|
GL.Color3(1.0, 1.0, 1.0);
|
|
|
- GL.TexCoord2(0.0, 0.0); GL.Vertex3(0, -size / 2.0, -0.5);
|
|
|
- GL.TexCoord2(-1.0, 0.0); GL.Vertex3(-size, -size / 2.0, -0.5);
|
|
|
- GL.TexCoord2(-1.0, -1.0); GL.Vertex3(-size, size / 2.0, -0.5);
|
|
|
- GL.TexCoord2(0.0, -1.0); GL.Vertex3(0, size / 2.0, -0.5);
|
|
|
+ GL.TexCoord2(0.0, 0.0); GL.Vertex3(size_2 + gap, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 0.0); GL.Vertex3(size_1_5 + gap, size_2, -0.5);
|
|
|
+ GL.TexCoord2(1.0, 1.0); GL.Vertex3(size_1_5 + gap, -size_2, -0.5);
|
|
|
+ GL.TexCoord2(0.0, 1.0); GL.Vertex3(size_2 + gap, -size_2, -0.5);
|
|
|
GL.End();
|
|
|
|
|
|
-
|
|
|
SwapBuffers();
|
|
|
}
|
|
|
|