Need help in drawing moving and bouncing ball

Started by
1 comment, last by cwchan 22 years, 6 months ago
I was currently given an assignment. Since I just started learning OpenGL (and worse, most of them are theories), thus I have no idea on how to program it. Below is the question: ================================================================ Implement a C/C++ interactive graphics program that "moving and bouncing (no gravity applied) a ball in a window" A Ball is drawn (as circle) with in multiple color to make it''s rotation clear. Implement keyboard call back function that: 1. enlarge the ball radius when press ''R'' 2. reduce the ball radius while press ''r'' 3. increase the ball velocity while press ''V'' 4. reduce the ball velocity while press ''v'' 5. increase ball direction angle (anti-clockwise) while press ''T'' 6. reduce the ball direction angle (anti-clockwise) while press ''t'' 7. increase the ball spinning speed (anti-clockwise) while press ''A'' 8. decrease the ball spinning speed (anti-clockwise) while press ''a'' Implement mouse call back function that: 1. Start / continue animation of the ball while left mouse button is pressed. 2. Pause animation while right mouse button is press ================================================================ Any help will be appreciated. Thanks.
Advertisement
You should first try to do it yourself before asking. The NeHe tutorials is probably covering everything you need to know.
So far I just managed to draw a filled circle. The problem now is how to make it move and rotate after I left-click the mouse. From what I know there are functions called:
glTranslate{fd}( dx, dy, dz );
glRotate{fd}( angleInDegrees, axisXvalue, axisYvalue, axisZvalue);

Just wondering how to implement it on my source file... I tried once but the window goes blank when I left click on it..
Below is my souce code so far (the transformation function is called rollCircle()):

    #include<GL\glut.h>#include<math.h>#include<stdio.h>void drawCircle(){	float originY=100;	float originX=100;	float radius=20;	float vectorX;	float vectorY;	float vectorY1;	float vectorX1;	float angle;	vectorY1=originY+radius;	vectorX1=originX;	glBegin(GL_TRIANGLES);	for(int i=0; i<=360;i++)	{		angle=(float)(((double)i)/57.29577957795135);		vectorX=originX+(radius*(float)sin((double)angle));		vectorY=originY+(radius*(float)cos((double)angle));		glVertex2d(originX,originY);		glVertex2d(vectorX1,vectorY1);		glVertex2d(vectorX,vectorY);		vectorY1=vectorY;		vectorX1=vectorX;		if(i<=120)			glColor3f(1.0,0.0,0.0);		else			if(i>120 && i<=240)				glColor3f(1.0,1.0,0.0);			else				glColor3f(0.0,1.0,0.0);				}	glEnd();}void rollCircle(){	//need help on this}void myMouse(int button, int state, int x, int y) { 	if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 		glutIdleFunc(rollCircle); // starts animation 	else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) 		glutIdleFunc(NULL); // stops animation } void myDisplay(){	glClear(GL_COLOR_BUFFER_BIT);	drawCircle();	glFlush();}void myInit(void){	glClearColor(0.0,0.0,0.0,0.0);	glMatrixMode(GL_PROJECTION);	glLoadIdentity();	gluOrtho2D(0.0,200.0,0.0,200.0);}void main(int argc, char **argv){	glutInit(&argc,argv);	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);	glutInitWindowSize(200,200);	glutInitWindowPosition(0,0);	glutCreateWindow("Circle");	glutDisplayFunc(myDisplay);	glutMouseFunc(myMouse);	myInit();	glutMainLoop();}    


Thanks for any help.


Edited by - cwchan on October 21, 2001 6:12:18 AM

This topic is closed to new replies.

Advertisement