Librerias
Código:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <gl\glut.h>
using namespace std;
Variables globales
Código:
float g = 9.8, v = 12, ang = 45;
Funcion dibujar
Código:
void Dibujar(){
glClear(GL_COLOR_BUFFER_BIT); //borra la pantalla grafica como un cls
glColor3f(1.0, 0.0, 0.0);
crea los ejes x e y
Código:
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(30.0, 0.0, 0.0);
glVertex3f(0.0, 30.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glEnd();
bloque de código dibuja una trayectoria de puntos verdes en la pantalla
Código:
glBegin(GL_POINTS); //indica que se dibujarán puntos
float rad = ang/57.3; //convierte el ángulo ang (en grados) a radianes.
for(float x = 0; x <= 1000; x = x + 0.2){
float y = tan(rad)*x-(g/(2*v*v*cos(rad)*cos(rad)))*x*x; //calcula la posición
//vertical y correspondiente a la posición horizontal x en la trayectoria, utilizando
//la fórmula de la trayectoria de un proyectil
glColor3f(0.0, 1.0, 0.0);
glVertex3f(x, y, 0.0);
if(y<0) {break;} //detiene el bucle si la posición vertical y es negativa, lo que
//significa que el proyectil ha caído al suelo.
}
glEnd();
glFlush();
}
función que establece la perspectiva y la posición de la cámara para que se pueda ver la escena correctamente en la ventana de visualización.
Código:
void CambiarTamano(int ancho, int alto){
if(alto == 0) alto = 1;
float razon = 1.0*ancho/alto;
glMatrixMode(GL_PROJECTION); //activaq el modo de proyeccion
glLoadIdentity(); //carga la imagen
glViewport(0, 0, ancho, alto);
gluPerspective(45, razon, 1, 1000); //cambia la perspectiva de acuerdo a la razon
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(10.0, 7.0, 20.0, //donde esta la camara
10.0, 7.0, 0.0, //hacia donde esta viendo
0.0, 1.0, 0.0); //cual es el eje hacia arriba
}
función que se llama cuando se presiona una tecla especial del teclado mientras se está ejecutando el programa
Código:
void Flechas(int key, int x, int y){
switch(key){
case GLUT_KEY_UP: ang +=1; Dibujar(); break;
case GLUT_KEY_DOWN: ang -=1; Dibujar(); break;
case GLUT_KEY_RIGHT: v +=1; Dibujar(); break;
case GLUT_KEY_LEFT: v -=1; Dibujar(); break;
}
}
Se inicia la biblioteca GLUT (glutInit) para configurar la ventana, los modos de visualización, la posición y el tamaño. Después, se registran las funciones de control de eventos con GLUT (glutSpecialFunc, glutDisplayFunc, glutReshapeFunc). Por último, se llama a glutMainLoop para iniciar el bucle de eventos de GLUT y mantener la ventana abierta hasta que el usuario la cierre.
Código:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(30, 30);
glutInitWindowSize(1000, 600);
glutCreateWindow("Prueba");
glutSpecialFunc(Flechas);
glutDisplayFunc(Dibujar);
glutReshapeFunc(CambiarTamano);
glutMainLoop();
return 0;
}