You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
5.1 KiB
226 lines
5.1 KiB
14 years ago
|
/* gltest.c */
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include "SDL.h"
|
||
|
#include "i2c.h"
|
||
|
|
||
|
#include "SDL_opengl.h"
|
||
|
|
||
|
static void setup_opengl( int width, int height )
|
||
|
{
|
||
|
float ratio = (float) width / (float) height;
|
||
|
|
||
|
glShadeModel( GL_SMOOTH );
|
||
|
|
||
|
glCullFace( GL_BACK );
|
||
|
glFrontFace( GL_CCW );
|
||
|
glEnable( GL_CULL_FACE );
|
||
|
|
||
|
glClearColor( 0, 0, 0, 0 );
|
||
|
|
||
|
glViewport( 0, 0, width, height );
|
||
|
|
||
|
glMatrixMode( GL_PROJECTION );
|
||
|
glLoadIdentity( );
|
||
|
|
||
|
gluPerspective( 60.0, ratio, 1.0, 1024.0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
void drawscene(int r, int p, int y)
|
||
|
{
|
||
|
static float roll, pitch, yaw;
|
||
|
|
||
|
roll += (float)r / 1000;
|
||
|
pitch += (float)p / 1000;
|
||
|
yaw += (float)y / 1000;
|
||
|
|
||
|
if (roll > 360.0)
|
||
|
roll -= 360.0;
|
||
|
if (roll < 360.0)
|
||
|
roll += 360.0;
|
||
|
if (pitch > 360.0)
|
||
|
pitch -= 360.0;
|
||
|
if (pitch < 360.0)
|
||
|
pitch += 360.0;
|
||
|
if (yaw > 360.0)
|
||
|
yaw -= 360.0;
|
||
|
if (yaw < 360.0)
|
||
|
yaw += 360.0;
|
||
|
|
||
|
|
||
|
static GLfloat v0[] = { -1.0f, -1.0f, 1.0f };
|
||
|
static GLfloat v1[] = { 1.0f, -1.0f, 1.0f };
|
||
|
static GLfloat v2[] = { 1.0f, 1.0f, 1.0f };
|
||
|
static GLfloat v3[] = { -1.0f, 1.0f, 1.0f };
|
||
|
static GLfloat v4[] = { -1.0f, -1.0f, -1.0f };
|
||
|
static GLfloat v5[] = { 1.0f, -1.0f, -1.0f };
|
||
|
static GLfloat v6[] = { 1.0f, 1.0f, -1.0f };
|
||
|
static GLfloat v7[] = { -1.0f, 1.0f, -1.0f };
|
||
|
static GLubyte red[] = { 255, 0, 0, 255 };
|
||
|
static GLubyte green[] = { 0, 255, 0, 255 };
|
||
|
static GLubyte blue[] = { 0, 0, 255, 255 };
|
||
|
static GLubyte white[] = { 255, 255, 255, 255 };
|
||
|
static GLubyte yellow[] = { 0, 255, 255, 255 };
|
||
|
static GLubyte black[] = { 0, 0, 0, 255 };
|
||
|
static GLubyte orange[] = { 255, 255, 0, 255 };
|
||
|
static GLubyte purple[] = { 255, 0, 255, 0 };
|
||
|
|
||
|
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||
|
|
||
|
/* We don't want to modify the projection matrix. */
|
||
|
glMatrixMode( GL_MODELVIEW );
|
||
|
glLoadIdentity( );
|
||
|
|
||
|
/* Move down the z-axis. */
|
||
|
glTranslatef( (float)0*4, (float)0*4, -5.0 );
|
||
|
|
||
|
/* Apply rotation from our model */
|
||
|
glRotatef( roll, 1.0, 0.0, 0.0 );
|
||
|
glRotatef( pitch, 0.0, 0.0, 1.0 );
|
||
|
glRotatef( yaw, 0.0, -1.0, 0.0 );
|
||
|
|
||
|
/* Send our triangle data to the pipeline. */
|
||
|
glBegin( GL_TRIANGLES );
|
||
|
|
||
|
glColor4ubv( red );
|
||
|
glVertex3fv( v0 );
|
||
|
glColor4ubv( green );
|
||
|
glVertex3fv( v1 );
|
||
|
glColor4ubv( blue );
|
||
|
glVertex3fv( v2 );
|
||
|
|
||
|
glColor4ubv( red );
|
||
|
glVertex3fv( v0 );
|
||
|
glColor4ubv( blue );
|
||
|
glVertex3fv( v2 );
|
||
|
glColor4ubv( white );
|
||
|
glVertex3fv( v3 );
|
||
|
|
||
|
glColor4ubv( green );
|
||
|
glVertex3fv( v1 );
|
||
|
glColor4ubv( black );
|
||
|
glVertex3fv( v5 );
|
||
|
glColor4ubv( orange );
|
||
|
glVertex3fv( v6 );
|
||
|
|
||
|
glColor4ubv( green );
|
||
|
glVertex3fv( v1 );
|
||
|
glColor4ubv( orange );
|
||
|
glVertex3fv( v6 );
|
||
|
glColor4ubv( blue );
|
||
|
glVertex3fv( v2 );
|
||
|
|
||
|
glColor4ubv( black );
|
||
|
glVertex3fv( v5 );
|
||
|
glColor4ubv( yellow );
|
||
|
glVertex3fv( v4 );
|
||
|
glColor4ubv( purple );
|
||
|
glVertex3fv( v7 );
|
||
|
|
||
|
glColor4ubv( black );
|
||
|
glVertex3fv( v5 );
|
||
|
glColor4ubv( purple );
|
||
|
glVertex3fv( v7 );
|
||
|
glColor4ubv( orange );
|
||
|
glVertex3fv( v6 );
|
||
|
|
||
|
glColor4ubv( yellow );
|
||
|
glVertex3fv( v4 );
|
||
|
glColor4ubv( red );
|
||
|
glVertex3fv( v0 );
|
||
|
glColor4ubv( white );
|
||
|
glVertex3fv( v3 );
|
||
|
|
||
|
glColor4ubv( yellow );
|
||
|
glVertex3fv( v4 );
|
||
|
glColor4ubv( white );
|
||
|
glVertex3fv( v3 );
|
||
|
glColor4ubv( purple );
|
||
|
glVertex3fv( v7 );
|
||
|
|
||
|
glColor4ubv( white );
|
||
|
glVertex3fv( v3 );
|
||
|
glColor4ubv( blue );
|
||
|
glVertex3fv( v2 );
|
||
|
glColor4ubv( orange );
|
||
|
glVertex3fv( v6 );
|
||
|
|
||
|
glColor4ubv( white );
|
||
|
glVertex3fv( v3 );
|
||
|
glColor4ubv( orange );
|
||
|
glVertex3fv( v6 );
|
||
|
glColor4ubv( purple );
|
||
|
glVertex3fv( v7 );
|
||
|
|
||
|
glColor4ubv( green );
|
||
|
glVertex3fv( v1 );
|
||
|
glColor4ubv( red );
|
||
|
glVertex3fv( v0 );
|
||
|
glColor4ubv( yellow );
|
||
|
glVertex3fv( v4 );
|
||
|
|
||
|
glColor4ubv( green );
|
||
|
glVertex3fv( v1 );
|
||
|
glColor4ubv( yellow );
|
||
|
glVertex3fv( v4 );
|
||
|
glColor4ubv( black );
|
||
|
glVertex3fv( v5 );
|
||
|
|
||
|
glEnd( );
|
||
|
|
||
|
SDL_GL_SwapBuffers();
|
||
|
}
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
SDL_Surface *screen;
|
||
|
int roll, pitch, yaw;
|
||
|
|
||
|
if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) {
|
||
|
fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
|
||
|
exit(1);
|
||
|
}
|
||
|
atexit(SDL_Quit);
|
||
|
|
||
|
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
|
||
|
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
|
||
|
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
|
||
|
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 32 );
|
||
|
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
|
||
|
|
||
|
//screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
|
||
|
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
|
||
|
if ( screen == NULL ) {
|
||
|
fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError());
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
setup_opengl(640, 480);
|
||
|
|
||
|
initparallel();
|
||
|
setupi2c();
|
||
|
calibrate();
|
||
|
|
||
|
query_device(&roll, &pitch, &yaw);
|
||
|
drawscene(roll, pitch, yaw);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
SDL_Event event;
|
||
|
/* SDL_WaitEvent(&event); */
|
||
|
while (SDL_PollEvent(&event))
|
||
|
{
|
||
|
switch (event.type)
|
||
|
{
|
||
|
case SDL_QUIT:
|
||
|
case SDL_KEYDOWN:
|
||
|
exit(0);
|
||
|
}
|
||
|
}
|
||
|
query_device(&roll, &pitch, &yaw);
|
||
|
drawscene(roll, pitch, yaw);
|
||
|
}
|
||
|
|
||
|
}
|