· Inicio del programa
· Posición actual de la pelota
· Tamaño de la pelota
· Tamaño del piso
· Tamaño de la ventana
· Dibujar la pelota
· Dibujar el piso
· Distancia de rebote del piso hacia arriba
· Modificar la distancio respecto al piso
· Saber si esta cállenlo o rebotando
· Verificar que no pase del piso
· Dirección de la pelota
· Disminuir la altura hasta quedar estática en el piso
· Fin del programa.
Codigo del programa
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#define WIDTH 640
#define HEIGHT 680
void reshape(int width, int height){
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-WIDTH/2,WIDTH/2-1,-HEIGHT/2,HEIGHT/2-1,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void init(void){
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPointSize(0.0);
}
void Timer(int ex)
{
glutPostRedisplay();
glutTimerFunc(30,Timer,0);
}
int k=20;
void circle(int p,int m)
{
int x=0,y,d,r;
r=m;
y=r;
d=3-2*r;
while(x<=y)
{
glVertex2i(-x,y+p);
glVertex2i(x,y+p);
glVertex2i(y,x+p);
glVertex2i(-x,y+p);
glVertex2i(-y,x+p);
glVertex2i(-x,-y+p);
glVertex2i(-y,-x+p);
glVertex2i(y,-x+p);
glVertex2i(x,-y+p);
if(d<0)
d=d+4*x+6;
else
{
d=d+4*(x-y)+10;
y--;
}
x++;
}
}
int r=100,flag=0;
void display(void)
{
typedef GLfloat point2[2];
point2 vertice[6] = { {-100.0,-100.0}, {-500.0,-100.0}, {-50.0,50.0},
{-50.0,50.0}, {100.0,50.0}, {100.0,50.0} };
glColor3f(0.0,1.0,0.0);
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex2f (-500, -240);
glVertex2f (0, -100);
glVertex2f (500, -240);
glVertex2f (0, -480);
}
glEnd();
glBegin(GL_LINES);
{
glColor3f(0.0,0.0,0.0);
glVertex2d(-100,-130);//1
glVertex2d(100,-130);
glColor3f(0.0,0.0,0.0);//
glVertex2d(-400,-230);
glVertex2d(400,-230);
glColor3f(0.0,0.0,0.0);
glVertex2d(-200,-150);
glVertex2d(200,-150);
glColor3f(0.0,0.0,0.0);
glVertex2d(-270,-170);
glVertex2d(270,-170);
glColor3f(0.0,0.0,0.0);
glVertex2d(-310,-190);
glVertex2d(310,-190);
glColor3f(0.0,0.0,0.0);
glVertex2d(-360,-210);
glVertex2d(360,-210);
glColor3f(0.0,0.0,0.0);
glVertex2d(-450,-250);
glVertex2d(450,-250);
glColor3f(0.0,0.0,0.0);
glVertex2d(-400,-270);
glVertex2d(400,-270);
glColor3f(0.0,0.0,0.0);
glVertex2d(-400,-390);
glVertex2d(400,-390);
glColor3f(0.0,0.0,0.0);
glVertex2d(-450,-310);
glVertex2d(450,-310);
glColor3f(0.0,0.0,0.0);
glVertex2d(-400,-330);
glVertex2d(400,-330);
glColor3f(0.0,0.0,0.0);
glVertex2d(-400,-350);
glVertex2d(400,-350);
//verticales
glColor3f(0.0,0.0,0.0);
glVertex2d(-0.0,-100);
glVertex2d(-0.0,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-50,-50);
glVertex2d(-50,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-100,-120);
glVertex2d(-100,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-150,-100);
glVertex2d(-150,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-200,-80);
glVertex2d(-200,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-250,-60);
glVertex2d(-250,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-300,-40);
glVertex2d(-300,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(-350,-200);
glVertex2d(-350,-400);
//
glColor3f(0.0,0.0,0.0);
glVertex2d(50,-50);
glVertex2d(50,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(100,-120);
glVertex2d(100,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(150,-100);
glVertex2d(150,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(200,-80);
glVertex2d(200,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(250,-60);
glVertex2d(250,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(300,-40);
glVertex2d(300,-400);
glColor3f(0.0,0.0,0.0);
glVertex2d(350,-200);
glVertex2d(350,-400);
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.1,0.5,1.0);
glBegin(GL_POINTS);
circle(k,r);
if(flag==0)
{
if((k+r)<=350)
{
k=k+10;
}
if((k+r)>=350){
flag=1;
}
}
if(flag==1)
{
k=k-10;
if((k-r)<=-210)
{
flag=2;
}
}
if(flag==2)
{
if((k+r)<=300)
{
k=k+10;
}
if((k+r)>=300){
flag=3;
}
}
if(flag==3)
{
k=k-10;
if((k-r)<=-210)
{
flag=4;
}
}
if(flag==4)
{
if((k+r)<=200)
{
k=k+10;
}
if((k+r)>=200){
flag=5;
}
}
if(flag==5)
{
k=k-10;
if((k-r)<=-210)
{
flag=6;
}
if(flag==6)
{
k;
glEnd();
glutSwapBuffers();
}
void idle(void){
}
int main(int argc, char **argv)
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition(0,0);
glutInitWindowSize(WIDTH,HEIGHT);
glutCreateWindow(argv[0]);
init();
glutIdleFunc(idle);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutTimerFunc(0,Timer,0);
glutMainLoop();
return(1);
}
Ejecucion del programa



No hay comentarios:
Publicar un comentario