summaryrefslogtreecommitdiffstats
path: root/headtrack_stereo_demo/src
diff options
context:
space:
mode:
authorDennis Peeten <dpeeten@onsneteindhoven.nl>2008-04-17 10:46:52 (GMT)
committerDennis Peeten <dpeeten@onsneteindhoven.nl>2008-04-17 10:46:52 (GMT)
commite3108220e8c9e1a66731d42f1769343d49728efd (patch)
tree7de84c0024d0cdbed9e5761d719f996a71c5c5ad /headtrack_stereo_demo/src
parent7e5ef59c21af27e98f2a50b076d3b73882929768 (diff)
download2iv55-e3108220e8c9e1a66731d42f1769343d49728efd.zip
2iv55-e3108220e8c9e1a66731d42f1769343d49728efd.tar.gz
2iv55-e3108220e8c9e1a66731d42f1769343d49728efd.tar.bz2
poep
Diffstat (limited to 'headtrack_stereo_demo/src')
-rw-r--r--headtrack_stereo_demo/src/glutcallbacks.cpp78
-rw-r--r--headtrack_stereo_demo/src/main.cpp18
-rw-r--r--headtrack_stereo_demo/src/scenerenderer.cpp10
-rw-r--r--headtrack_stereo_demo/src/typedefs.h4
4 files changed, 90 insertions, 20 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
diff --git a/headtrack_stereo_demo/src/main.cpp b/headtrack_stereo_demo/src/main.cpp
index 40e726f..f7f037a 100644
--- a/headtrack_stereo_demo/src/main.cpp
+++ b/headtrack_stereo_demo/src/main.cpp
@@ -33,7 +33,6 @@ void InitGL(void)
glClearDepth(1000.0);
glDisable(GL_DITHER);
glShadeModel(GL_SMOOTH);
- //glEnable(GL_NORMALIZE); //why??
glEnable(GL_CULL_FACE);
}
@@ -104,6 +103,10 @@ bool LoadGreyScaleShader()
glLinkProgram(g_GameState.m_GreyScaleShaderProgram);
+ g_GameState.m_GSConvScaleLoc = glGetUniformLocation(g_GameState.m_GreyScaleShaderProgram, "g_ConversionWeights");
+
+
+
return true;
}
@@ -149,12 +152,15 @@ int main(int argc, char **argv)
g_GameState.m_FrustumParms.m_dCameraYCenter = 768.0/2.0;
g_GameState.m_FrustumParms.m_dYAngleCorrection = 0.0; //to be initialised correctly
g_GameState.m_FrustumParms.m_dScreenHeightWorld = 20.0;
- g_GameState.m_FrustumParms.m_dCameraYOffset = 130.0;
+ /*g_GameState.m_FrustumParms.m_dCameraYOffset = 130.0;
g_GameState.m_FrustumParms.m_dScreenHeightMM = 210.0;
- g_GameState.m_FrustumParms.m_dScreenAspect = 4.0/3.0;
- //g_GameState.m_FrustumParms.m_dCameraYOffset = 205.0;
- //g_GameState.m_FrustumParms.m_dScreenHeightMM = 320.0;
- //g_GameState.m_FrustumParms.m_dScreenAspect = 16.0/10.0;
+ g_GameState.m_FrustumParms.m_dScreenAspect = 4.0/3.0;*/
+ g_GameState.m_GSConvScale[0] = 0.299;
+ g_GameState.m_GSConvScale[1] = 0.587;
+ g_GameState.m_GSConvScale[2] = 0.114;
+ g_GameState.m_FrustumParms.m_dCameraYOffset = 205.0;
+ g_GameState.m_FrustumParms.m_dScreenHeightMM = 320.0;
+ g_GameState.m_FrustumParms.m_dScreenAspect = 16.0/10.0;
g_GameState.m_bHeadTrackingEnabled = false;
g_GameState.m_bStereoEnabled = false;
diff --git a/headtrack_stereo_demo/src/scenerenderer.cpp b/headtrack_stereo_demo/src/scenerenderer.cpp
index 15c0a73..2fc7042 100644
--- a/headtrack_stereo_demo/src/scenerenderer.cpp
+++ b/headtrack_stereo_demo/src/scenerenderer.cpp
@@ -1,6 +1,9 @@
#include <GL\glut.h>
#include "typedefs.h"
+#define _USE_MATH_DEFINES
+#include <math.h>
+
extern GameState_t g_GameState;
void DrawRasterBox()
@@ -160,5 +163,12 @@ void RenderScene(void)
//glScaled(1.0, 1.0, 10.0);
glutSolidSphere(2.0, 8, 16);
glPopMatrix();
+
+ glPushMatrix();
+ double angle = double(glutGet(GLUT_ELAPSED_TIME)%4000)/1000.0;
+ glTranslatef(0.0, 0.0, -10.0);
+ glRotatef(angle * 90.0, 0.0, 1.0, 0.0);
+ glutSolidTorus(3.0, 5.0, 16, 64);
+ glPopMatrix();
} \ No newline at end of file
diff --git a/headtrack_stereo_demo/src/typedefs.h b/headtrack_stereo_demo/src/typedefs.h
index 55e2da5..5fe521e 100644
--- a/headtrack_stereo_demo/src/typedefs.h
+++ b/headtrack_stereo_demo/src/typedefs.h
@@ -31,6 +31,8 @@ typedef struct GameState
bool m_bHeadTrackingEnabled;
bool m_bStereoEnabled;
wiimote *m_pTrackingWiimote;
- GLuint m_GreyScaleShaderProgram;
+ GLuint m_GreyScaleShaderProgram; //handle to the grayscale shader program
+ GLint m_GSConvScaleLoc; //handle to the g_ConversionScale variable in the shader
+ GLfloat m_GSConvScale[3]; //grayscale conversion scale (default 0.299, 0.587, 0.114)
} GameState_t;
#endif //TYPEDEFS_HEADER_FILE \ No newline at end of file