domingo, 9 de marzo de 2014

Disparo ;)

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