Arthur Adorno

Members
  • Content count

    2
  • Joined

  • Last visited

Community Reputation

104 Neutral

About Arthur Adorno

  • Rank
    Newbie
  1. OpenGL Collision Detection

    I tried putting that code in mine, but that error is appearing and I don't now why.   'struct Rect' has no member named 'checkCollision'   But checkCollision is obviously there.
  2. 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.