Original Post
hI, I M KINDA NEW with opengL and i was wondering if i could get around a printing problem. I know this forum has a nice print method and mine is similar to that one... I was wondering where i have to write a print statement that would make the winner print out on screen. i know display function does that but then i need a way to check if the winner button was clicked. I am confused as to what to do. Can someone look at the code please and give me any clue? I would be gr8 ful. I have put comment on the winner part of the code so u can understand. its using C code w/ vc++ 6.0 compile..and glut. [Edited by - jahan on September 29, 2004 1:38:05 PM]
#include <stdlib.h>
#include <GL/glut.h>
#include <stdio.h> // need for function Output
#include <stdarg.h> // need for function Output
float ww=500,wh=500;
float xoffset1=0.0;
float deltax1=0.01;
float xoffset2=0.0;
float deltax2=0.01;
void Output(GLfloat x, GLfloat y, char *format,...)
{
va_list args;
char buffer[200], *p;
va_start(args,format);
vsprintf( buffer,format,args);
va_end(args);
glRasterPos2f(x,y);
for (p=buffer ; *p ; p++)
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, *p);
}
void display(void)
{
// pick a background color
glClearColor(1.0f,0.9f,1.0f,1.0f);
// clear screen
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.8,0.9,0.9);
glRectf(0,19,2,20);
glColor3f(0.0,0.0,0.0);
Output(0,19.5,"START");
glColor3f(0.9,0.8,0.9);
glRectf(0,17.5,2,18.5);
glColor3f(0.0,0.0,0.0);
Output(0,18.5,"STOP");
//WINNER
//Need a way to check which car is winner.
//And print it on the screen
glColor3f(0.9,0.8,0.9);
glRectf(0,16,2,17);
glColor3f(0.0,0.0,0.0);
Output(0,16.5,"WINNER");
//draw 2-d objects
//car1
glTranslatef(xoffset1,0,0.0);
glNormal3f(0.0,0.0,1.0);
glColor3f(1.0,1.0,0.7);
glBegin(GL_POLYGON);
glVertex2f(0,6.0);
glVertex2f(3.0,6.0);
glVertex2f(3.0,6.4);
glVertex2f(2.2,6.4);
glVertex2f(2.0,6.8);
glVertex2f(1.0,6.8);
glVertex2f(0.6,6.4);
glVertex2f(0.2,6.4);
glVertex2f(0.1,6.4);
glVertex2f(0.0,6.0);
glEnd();
glTranslatef(-xoffset1,0.0,0.0);
//car2
glTranslatef(xoffset2,0,0.0);
glNormal3f(0.0,0.0,1.0);
glColor3f(1.0,0.7,1.0);
glBegin(GL_POLYGON);
glVertex2f(0,8.0);
glVertex2f(3.0,8.0);
glVertex2f(3.0,8.4);
glVertex2f(2.2,8.4);
glVertex2f(2.0,8.8);
glVertex2f(1.0,8.8);
glVertex2f(0.6,8.4);
glVertex2f(0.2,8.4);
glVertex2f(0.1,8.4);
glVertex2f(0.0,8.0);
glEnd();
glTranslatef(-xoffset2,0.0,0.0);
glutSwapBuffers();
glFlush();
}
void Reshape(int w, int h)
{
glViewport(0, 0, w, h);
// use orthographic projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,20.0,0.0,20.0,-1.0,1.0);
ww=w;wh=h;
}
void mouse(int button,int state,int x,int y)
{
if (button==GLUT_LEFT_BUTTON &
( (x<0.10*wh) & (y<0.05*wh))) {
deltax1=0.1;
deltax2=0.2;
}
else if (button==GLUT_LEFT_BUTTON &
( (x<0.10*wh) & (y<0.12*wh) & (y>0.07*wh)))
{
deltax1=0.0;
deltax2=0.0
}
//winner method : if left click then car1 iis winner
// else if right click then car2 is winner. i want
//this to be printed out on the screen but since this
//is not in the display function it won't show up
else if (button==GLUT_LEFT_BUTTON &
( (x<0.10*wh) & (y<0.19*wh) & (y>0.14*wh)))
{
deltax1 = .4;
glColor3f(0.6, 0.9, 0.6);
Output(10,20,"Winner");
}
else if (button==GLUT_RIGHT_BUTTON &
( (x<0.10*wh) & (y<0.19*wh) & (y>0.14*wh)))
{
deltax1=0.0;
deltax2=0.0
}
glutPostRedisplay();
}
void vrooom()
{
xoffset1 = xoffset1+deltax1;
if (xoffset1>20.0) { xoffset1=0;xoffset2=xoffset2-20.0;}
else if (xoffset2>20.0) {xoffset2=0;xoffset1=xoffset1-20.0;}
xoffset2 = xoffset2+deltax2;
glutPostRedisplay();
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
//create window
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600, 600);
glutCreateWindow("races");
//register callback functions
glutReshapeFunc(Reshape);
glutDisplayFunc(display);
glutIdleFunc(vrooom);
glutMouseFunc(mouse);
//enter event loop
glutMainLoop();
}