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;
}