summaryrefslogtreecommitdiffstats
path: root/headtrack_stereo_demo/src/glutcallbacks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'headtrack_stereo_demo/src/glutcallbacks.cpp')
-rw-r--r--headtrack_stereo_demo/src/glutcallbacks.cpp78
1 files changed, 65 insertions, 13 deletions
diff --git a/headtrack_stereo_demo/src/glutcallbacks.cpp b/headtrack_stereo_demo/src/glutcallbacks.cpp
index 9b582f8..6002a85 100644
--- a/headtrack_stereo_demo/src/glutcallbacks.cpp
+++ b/headtrack_stereo_demo/src/glutcallbacks.cpp
@@ -1,6 +1,7 @@
#include <wiimote.h>
#include <GL\glew.h>
#include <GL\glut.h>
+#include <stdlib.h>
#include "typedefs.h"
#include "stereoheadtrackfrustum.h"
@@ -23,6 +24,13 @@ void ExitProgram()
exit(0);
}
+inline void GSConvScaleChange(int index, GLfloat delta)
+{
+ g_GameState.m_GSConvScale[index] += delta;
+ if (g_GameState.m_bStereoEnabled)
+ glUniform3fv(g_GameState.m_GSConvScaleLoc, 1, g_GameState.m_GSConvScale);
+}
+
void Keyboard(unsigned char f_cKey, int f_iX, int f_iY)
{
switch(f_cKey)
@@ -36,17 +44,6 @@ void Keyboard(unsigned char f_cKey, int f_iX, int f_iY)
case 's':
case 'S': //enable /disable stereo vision
g_GameState.m_bStereoEnabled = !g_GameState.m_bStereoEnabled;
-
- if (g_GameState.m_bStereoEnabled)
- {
- //enable greyscale shader
- glUseProgram(g_GameState.m_GreyScaleShaderProgram);
- }
- else
- {
- //disable greyscale shader
- glUseProgram(0);
- }
break;
case 'h':
@@ -74,6 +71,15 @@ void Keyboard(unsigned char f_cKey, int f_iX, int f_iY)
// }
//}
break;
+
+ case 'u': GSConvScaleChange(0, 0.05); break;
+ case 'j': GSConvScaleChange(0, -0.05); break;
+
+ case 'i': GSConvScaleChange(1, 0.05); break;
+ case 'k': GSConvScaleChange(1, -0.05); break;
+
+ case 'o': GSConvScaleChange(2, 0.05); break;
+ case 'l': GSConvScaleChange(2, -0.05); break;
}
}
@@ -86,6 +92,11 @@ void Display(void)
if (g_GameState.m_bStereoEnabled)
{
+ //enable grayscale shader
+ glUseProgram(g_GameState.m_GreyScaleShaderProgram);
+ //set the conversion scale
+ glUniform3fv(g_GameState.m_GSConvScaleLoc, 1, g_GameState.m_GSConvScale);
+
for (int CurrentEye=0; CurrentEye<2; CurrentEye++) //STEREO_LEFT_EYE = 0, STEREO_RIGHT_EYE = 1
{
l_bEyeLocated = false;
@@ -123,6 +134,8 @@ void Display(void)
RenderScene();
}
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ //disable greyscale shader
+ glUseProgram(0);
}
else // !g_GameState.m_bStereoEnabled
{
@@ -150,9 +163,48 @@ void Display(void)
RenderScene();
}
-
- glutSwapBuffers();
+ GLdouble width = (GLdouble)glutGet(GLUT_SCREEN_WIDTH),
+ height = (GLdouble)glutGet(GLUT_SCREEN_HEIGHT);
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho(0.0, width, 0.0, height, -1.0, 1.0);
+ glScaled(1.0, -1.0, 1.0);
+ glTranslatef(0.0, -height, 0.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushAttrib(GL_LIGHTING_BIT);
+ glShadeModel(GL_FLAT);
+ glDisable(GL_LIGHTING);
+ glPushMatrix();
+ glLoadIdentity();
+ glBegin(GL_QUADS);
+ glColor3f(0.2f, 0.2f, 0.2f);
+ glVertex3f(0.0f, 0.0f, -0.5f);
+ glVertex3f(0.0f, 30.0f, -0.5f);
+ glVertex3f(325.0f, 30.0f, -0.5f);
+ glVertex3f(325.0f, 0.0f, -0.5f);
+ glEnd();
+
+ glColor3f(1.0, 1.0, 1.0);
+ glRasterPos3f(5.0, 22.0, 0.5);
+ char string[256];
+ sprintf(string, "RGB conv scale: %4.3f, %4.3f, %4.3f",
+ g_GameState.m_GSConvScale[0],
+ g_GameState.m_GSConvScale[1],
+ g_GameState.m_GSConvScale[2]);
+ int len = strlen(string);
+ for (int i=0; i<len; i++)
+ glutBitmapCharacter(GLUT_BITMAP_9_BY_15, string[i]);
+
+ glPopMatrix();
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glPopAttrib();
+
+ glutSwapBuffers();
} // Display