Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


Need help in drawing moving and bouncing ball


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 cwchan   Members   -  Reputation: 122

Like
Likes
Like

Posted 20 October 2001 - 05:08 AM

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.

Sponsor:

#2 Obelix   Members   -  Reputation: 122

Like
Likes
Like

Posted 20 October 2001 - 07:27 PM

You should first try to do it yourself before asking. The NeHe tutorials is probably covering everything you need to know.

#3 cwchan   Members   -  Reputation: 122

Like
Likes
Like

Posted 20 October 2001 - 11:06 PM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS