--------------------------------------------------------------------------------

HELLO FRIENDS...
I M MAKING A GAME WHICH IS CALLED "RAMP GAME".
THIS GAME CONSIST OF
1) A BALL, 2) A BASKET, 3) SOME LINES ( which can be place anywhere by the user with in the boundary walls).

SNIP
u can see what it looks like....

now what i m here for?....is i dont know how to bounce a ball w.r.t the collision angle..... i don't know how to move lines at run time.....
i should no my problems here, so u can understand what i m trying to say...

1) Setting the lines at run time.
2) When ball collides with the lines then it should reflect w.r.t the angle of
reflection.

ONE MORE THING......there is a restriction that the game should be made on "OPENGL".

well is there any rule not to ask our problems here ??????
can any1 help me here then plz tell me.....
my cprogramming thread is closed , i don't know y....

firstPerson 761

ok....
1)i want to set the lines at run time.( w.r.t. x-axis,y-axis,clockwise and anti-clockwise)
2)i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....

using OPENGL
[/edit]

firstPerson 761

ok....

1)i want to set the lines at run time.( w.r.t. x-axis,y-axis,clockwise and anti-clockwise)

Ok whats the problem. In your drawFunc have the (X_i,Y_i,Z_i)
and the (X_f, Y_f, Z_f) as variables and change it accordingly. Maybe
if '+' is pressed, increase the length of each X coord by 1 unit...

2)i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....

Option # 1) Check if the lines is within the circle's position. The
circle position has an X,Y,Z coordinate. If the line is within the area
of the circle then there is a collision. And move the circle -x.

Option # 2) Check if the circle + radius is within the Top height
and the low height of the line. If so then check if its X position + radius
is within the lines X coordinate of the line. If so then there is a collision and
move circle to -x, maybe by making its x velocity = -x velocity.

Can i change the line positions by not making any function of darwline()????
I m using opengl in which i can use
GLBegin(gl_lines);
And i m working in 2D.....
And can u plz help me in coding manners??? or pseudo code????
if it doesn't matter to u......?

I have this Piece of code to bounce a ball.....

``````#include <gl/glut.h>  // Also included gl.h, glu.h
#include <Math.h>     // Needed for sin, cos
#define PI 3.14159265f

// Global variables
char title[] = "Bouncing Ball (2D)";  // Windowed mode's title
int windowWidth  = 640;     // Windowed mode's width
int windowHeight = 480;     // Windowed mode's height
int windowPosX   = 50;      // Windowed mode's top-left corner x
int windowPosY   = 50;      // Windowed mode's top-left corner y

GLfloat xPos = 0.0f;         // Ball's (x, y) position
GLfloat yPos = 0.0f;
GLfloat xPosMax, xPosMin, yPosMax, yPosMin; // Ball's (x, y) bounds
GLdouble xLeft, xRight, yBottom, yTop;      // Projection clipping area
GLfloat xSpeed = 0.02f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.007f;
int refreshMillis = 30;      // Refresh period in milliseconds

// Initialize OpenGL Graphics
void initGL() {
glClearColor(0.0, 0.0, 0.0, 1.0); // Set background (clear) color to black
}

// Callback handler for window re-paint event
void display() {
glClear(GL_COLOR_BUFFER_BIT);    // Clear the color buffer

glTranslatef(xPos, yPos, 0.0f);  // Translate to (xPos, yPos)
// Use triangular segments to form a circle
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.0f, 0.0f, 1.0f);  // Blue
glVertex2f(0.0f, 0.0f);       // Center of circle
int numSegments = 100;
GLfloat angle;
for (int i = 0; i < numSegments; i++) {
angle = i * 2.0f * PI / numSegments;  // 360 deg for all segments
}
glEnd();

glutSwapBuffers();  // Swap front and back buffers (of double buffered mode)

// Animation Control - compute the location for the next refresh
xPos += xSpeed;
yPos += ySpeed;
// Check if the ball exceeds the edges
if (xPos > xPosMax) {
xPos = xPosMax;
xSpeed = -xSpeed;
} else if (xPos < xPosMin) {
xPos = xPosMin;
xSpeed = -xSpeed;
}
if (yPos > yPosMax) {
yPos = yPosMax;
ySpeed = -ySpeed;
} else if (yPos < yPosMin) {
yPos = yPosMin;
ySpeed = -ySpeed;
}
}

// Call back when the windows is re-sized.
void reshape(GLsizei weight, GLsizei height) {
if (height == 0) height = 1;               // To prevent divide by 0
GLfloat aspect = (GLfloat)weight / height; // Get aspect ratio

// Set the viewport to cover the entire window
glViewport(0, 0, weight, height);

// Adjust the aspect ratio of clipping area to match the viewport
glMatrixMode(GL_PROJECTION); // Select the Projection matrix
if (weight <= height) {
xLeft   = -1.0;
xRight  = 1.0;
yBottom = -1.0 / aspect;
yTop    = 1.0 / aspect;
} else {
xLeft   = -1.0 * aspect;
xRight  = 1.0 * aspect;
yBottom = -1.0;
yTop    = 1.0;
}
gluOrtho2D(xLeft, xRight, yBottom, yTop);

// Reset the model-view matrix
glMatrixMode(GL_MODELVIEW); // Select the model-view matrix
}

// Animation timer function
void Timer(int value) {
glutPostRedisplay();    // Post a paint request to activate display()
glutTimerFunc(refreshMillis, Timer, 0); // subsequent timer call at milliseconds
}

// main function - GLUT run as a Console Application
int main(int argc, char** argv) {
glutInit(&argc, argv);            // Initialize GLUT
glutInitDisplayMode(GLUT_DOUBLE); // Enable double buffered mode
glutInitWindowSize(windowWidth, windowHeight);  // Initial window width and height
glutInitWindowPosition(windowPosX, windowPosY); // Initial window top-left corner (x, y)
glutCreateWindow(title);      // Create window with given title
glutDisplayFunc(display);     // Register callback handler for window re-paint
glutReshapeFunc(reshape);     // Register callback handler for window re-shape
glutTimerFunc(0, Timer, 0);   // First timer call immediately
initGL();                     // Our own OpenGL initialization
glutMainLoop();               // Enter event-processing loop
return 0;
}``````

Can u explain me what Timer() and reshape() do here inthis piece of code?

William Hemsworth 1,339

Okay, you clearly didn't write that code, so before you go any further, do you actually understand any of this or have a knowledge of OpenGL at all? if not, read a book or tutorial first then give it a shot.

i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....

If you want to bounce off an angled surface, your problem requires some physics, so unless you really know your stuff, don't consider this an easily achievable task.

I know the physics thing .......but i don't know how interact both the things......:(
I mean i can make a class of VECTOR working for 2D, it can find the dot product, addition, subtraction and all.
But i don't how interact this class with the circle to find collision detection....

This code is running good ... but I'm unable to make the ball fall down.
Plz tell what changes i should make to create gravity effects???

William Hemsworth 1,339

This code is running good ... but I'm unable to make the ball fall down.
Plz tell what changes i should make to create gravity effects???

Constantly increment ySpeed by however strong you want the gravity to be.

Somewhere in your game loop, try:

``ySpeed += 0.5f;``

or a value of your choice (better stored as a constant variable).

I have changed these lines of code

``````GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.05f;``````

Now the ball is moving in y-axis only...
And William where i should make these changes u r talking ??

``ySpeed += 0.5f;``

William Hemsworth 1,339

Pretty much anywhere in your game loop, if you want an exact position, I would put it directly before the lines:

``````// Animation Control - compute the location for the next refresh
xPos += xSpeed;
yPos += ySpeed;``````

Thanks William it is working......

``````// Animation Control - compute the location for the next refresh
ySpeed -= 0.04f;
xPos += xSpeed;
yPos += ySpeed;``````

NOW I HAVE A QUESTION, IF THE BALL DETECTS ANY COLLISION IN BETWEEN THE SCREEN WILL IT MOVEIN X-AXIS OR NOT????
I MEAN I SET THESE LINES OF CODE

``````GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.001f;``````

which means ( GLfloat xSpeed = 0.0f; ) this will effect the ball to move in x-axis if the ball detects any sloped line ....right?
[/edit]

William Hemsworth 1,339

You're shouting again, and i don't understand your question.

I'm not shouting my friend...
First tell me how can i attach my file here in the thread?
then will understand my problem...

http://www.4shared.com/file/129694854/34018122/ramp.html
CHECK THIS OUT , I HAVE MADE A .bmp FOR U.
[EDIT]
NOW U CAN SEE THE SLOPED LINES TO WHICH THE BALL IS INTERSECTING,
NOW AFTER INTERSECTION THE BALL WILL TRAVEL BOTH THE AXIS i.e X AND Y.
I WRITE THIS LINE IN MY CODING

``````GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.001f;``````

WHICH MEANS BALL HAS ONLY ySpeed BUT NOT xSpeed, WHICH FURTHER MEANS THE BALL WILL MOVE IN ONLY ONE DIRECTION i.e Y-AXIS.
U GOT ME NOW?

commented: CAPS == SHOUTING you doofus -7