En este código jugamos un poco con lo que hemos aprendido del uso del teclado. Se muestran dos lineas perpendiculares y al presionar "a" aparece una esfera roja
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glu.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <iostream>
#endif
using namespace std;
#include <stdlib.h>
float radio= 0.0;
float valor_x= 0.0;
float m[100]={2.0};
int b=1;
int i=1;
void keyInput(unsigned char key, int x, int y)
{
switch(key){
case 'q':
exit(0);
break;
case 'a':
if(b==0)
{
b=1;
i=i+2;
}
glPushMatrix();
glTranslatef(valor_x,radio,0.0);
glColor3f(1.0,0.0,0.0);
glutWireSphere(0.1,15,15);
glPopMatrix();
glFlush();
m[i-1]=valor_x;
m[i]=radio;
if(b==1)
{
b=0;
}
break;
}
}
void specialkeyInput(int key,int x, int y)
{
if(key==GLUT_KEY_DOWN)
{
if(radio<-1.2)
{
radio=1;
}
else
{
radio-=0.1;
glutPostRedisplay();
}
}
if(key==GLUT_KEY_LEFT)
{
if(valor_x<-1.2)
{
valor_x=1;
}
else
{
valor_x-=0.1;
glutPostRedisplay();
}
}
if(key==GLUT_KEY_UP)
{
if(radio>1.2)
{
radio=-1;
}
radio+=0.1;
glutPostRedisplay();
}
if(key==GLUT_KEY_RIGHT)
{
if(valor_x>1.2)
{
valor_x=-1;
}
else
{
valor_x+=0.1;
glutPostRedisplay();
}
}
}
void dibuja()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(b==0)
{
for(int j=1;j<=i;j=j+2)
{
cerr<<m[j-1];
glPushMatrix();
glColor3f(1.0,0.0,0.0);
glTranslatef(m[j-1],m[j],0.0);
glutWireSphere(0.1,15,15);
glPopMatrix();
}
}
glColor3f(1.0,1.0,0.0);
glBegin(GL_LINES);
glVertex2f(valor_x, 1.0);
glVertex2f(valor_x, -1.0);
glVertex2f(1.0, radio);
glVertex2f(-1.0, radio);
glEnd();
glFlush();
}
int main()
{
cerr << " main() \n";
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowSize(550,550);
glutCreateWindow("");
glutKeyboardFunc(keyInput);
glutDisplayFunc(dibuja);
glutSpecialFunc(specialkeyInput);
glutMainLoop();
}
No hay comentarios:
Publicar un comentario