Jump to content

  • Log In with Google      Sign In   
  • Create Account


HellsMan

Member Since 09 Jun 2013
Offline Last Active Jun 12 2013 03:10 PM
-----

Topics I've Started

Collision Detection

09 June 2013 - 02:38 PM

Hey guys,

 

I'm new here and programming in OpenGL as well.

 

I have this code:

 

 

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>


void display(void);
float CalcularX(float t);
float CalcularY(float t);
float RegraTres(float a);
void colisao(GLint x_ball_novo, GLint y_ball_novo);
void init(void);
void DrawBall(GLint x, GLint y);
void keyboard(unsigned char key, int x, int y);
float CalcularXteste(float t, float velocidadeInicial);
float dpsdoChoque(float x_ball, float t);


GLint width = 15;
GLint x_ball = 0, y_ball = 0;


GLint x_ball_novo = 0, y_ball_novo = 0;


int x_barra = 250, y_barra = 80, height = 50;


/*Mudar pra outros resultados*/
double anguloG = 45;
float velocidadeInicial = 2.0;


float tempo = 0;
const float pi = 3.1416;
const float g = 0.01;//9.8;//-1;
double angulo;






int main(int argc, char** argv){
    
  glutInit(&argc, argv);
  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize (640, 480); 
  glutInitWindowPosition (100, 100); 
  glutCreateWindow ("Física - MU");
  angulo = RegraTres(anguloG);
  init();
  glutKeyboardFunc(keyboard);
  glutDisplayFunc(display);
  glutMainLoop();


  return 0;
}




void init(void){
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glOrtho (0, 640, 0, 480, -1 ,1);


} 


void display(void){
  
  //Barras
  glBegin(GL_LINES);
  glVertex2i(x_barra,y_barra);  glVertex2i(x_barra, y_barra+height);
  glEnd();
  glutSwapBuffers();  
  
  glClear(GL_COLOR_BUFFER_BIT);
  
  
  
  glLineWidth(width);
  glBegin(GL_LINE_LOOP);
  glEnd();
  
  


  //DrawBall((int)CalcularX(tempo), (int)CalcularY(tempo));
  tempo += velocidadeInicial;
  
  glEnd();
  glFlush();
  glutPostRedisplay();
  
  colisao(x_ball_novo, y_ball_novo);
  dpsdoChoque(x_ball_novo, tempo);
  
}


void keyboard(unsigned char key, int x, int y){
  switch (key) {
  case 27:
exit(0);
break;


  case 'w':
    tempo=0;
    break;
            }
}


float CalcularX(float t){   
    return (velocidadeInicial * cos(angulo) * t);
}


float CalcularY(float t){ 
  return velocidadeInicial * sin(angulo) * t - ((g * t * t)/2) ;
}


float CalcularXteste(float t, float velocidadeInicial){   
    return (velocidadeInicial * cos(angulo) * t);
}


float dpsdoChoque(float x_ball_novo, float t){  
      return y_ball_novo + (-velocidadeInicial * sin(angulo+(pi/2)) * t - ((g * t * t)/2));
}


float RegraTres(float a){     
  return ((3.1416 * a)/180.0);
}


void colisao(GLint x_ball, GLint y_ball){
     
     glPointSize(width);
     glBegin(GL_POINTS);
     //glVertex2i(x_ball_novo,y_ball_novo);
     glEnd();


     GLfloat Bola_nova = x_ball + width;
     GLint Barra_nova = x_barra + width;
     
      
     if(Bola_nova >= Barra_nova){
          //DrawBall((int)CalcularXteste(tempo, -velocidadeInicial),(int)CalcularY(tempo));
          //DrawBall(135+(int)CalcularX(tempo), (int)CalcularY(tempo));
          //x_ball_novo = x_ball_novo + 2;
          exit(0);
          }
     else{
          DrawBall((int)CalcularX(tempo), (int)CalcularY(tempo)); 
          //x_ball_novo = x_ball_novo + 2;
          }
}




void DrawBall(GLint x_ball, GLint y_ball){
  //Bola
  glPointSize(width);
  glBegin(GL_POINTS);
  glVertex2i(x_ball,y_ball);
  glEnd();
  
  GLint Bola = x_ball + width;
  GLint Barra = x_barra + width;
  
     /*if (Bola >= Barra){


         DrawBall(135+(int)CalcularX(tempo), (int)CalcularY(tempo));
         
         else{
              }
       */  
    
         //velocidadeInicial*-1;
         //DrawBall(x_ball - 1, y_ball - 1);
         //angulo = RegraTres(anguloG - 5);
         //velocidadeInicial == velocidadeInicial - 5;


}
 

 

 
That does launch oblique with a square (called ball in the code) to a bar.
My problem is in how to detect the colision and after the collision is detected I want that the square goes in the opposite direction.
 
Since now, thanks for the help.

PARTNERS