Archived

This topic is now archived and is closed to further replies.

cwchan

Need help in drawing moving and bouncing ball

Recommended Posts

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.

Share this post


Link to post
Share on other sites
You should first try to do it yourself before asking. The NeHe tutorials is probably covering everything you need to know.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites