jueves, 6 de marzo de 2014

Coordinates with GLUT OpenGL (DRAW FIGURES)


Código Fuente:

//Las figuras se dibujan presionando la tecla d;
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/gl.h>
#include <GL/glut.h>
#endif
#include <stdlib.h>
#include <iostream>


using namespace std;

float valor_x=0.0,valor_y=0.0;
float x1=0.0,y1=1.0,x2=0.0,y2=-1.0,x3=-1.0,y3=0.0,x4=1.0,y4=0.0;
int cont=0,i=0;
float Arreglo[2][200]={0.0};


void display()
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

        glPushMatrix();
        glPointSize(10);
        glLineWidth(2);
        glColor3f(0.0,0.0,1.0);
        glBegin(GL_LINES);
        glVertex2d(x1,y1);
        glVertex2d(x2,y2);
        glVertex2d(x3,y3);
        glVertex2d(x4,y4);
        glEnd();
        glPopMatrix();

     i=0;
    while(i<cont)
    {
     glPushMatrix();
     glTranslatef(Arreglo[0][i],Arreglo[1][i],0);
     glColor3f(1,0,0);
     glRotatef(70,0,1,1);
     glutWireCube(0.1);
     glPopMatrix();
     i+=1;
     }

        glFlush();


}

void keyinput(unsigned char key, int x, int  y)
{
    switch(key)
    {
 case 'q':
    exit(0);
    break;
 case 'd':
     Arreglo[0][cont]=valor_x;
     Arreglo[1][cont]=valor_y;
     cont+=1;
     glutPostRedisplay();
        break;
    }
}




void  specialKeyInput(int key,int x,int y)
{
    if(key==GLUT_KEY_DOWN)
    {
        valor_y-=0.2;
         y3-=0.2;
         y4-=0.2;
         y2-=0.2;
        if(valor_y<=float(-1.1) and valor_y>float(-1.3))
        {
         valor_y=1.0;
         y3=1;
         y4=1;
        }


        glutPostRedisplay();
    }

    if(key==GLUT_KEY_UP)
    {
        valor_y+=0.2;
         y3+=0.2;
         y4+=0.2;
         y1+=0.2;
        if(valor_y>=float(1.1) and valor_y<float(1.3))
        {
         valor_y=-1.0;
         y3=-1.0;
         y4=-1.0;
        }


        glutPostRedisplay();
    }

    if(key==GLUT_KEY_LEFT)
    {
        valor_x-=0.2;
         x1-=0.2;
         x2-=0.2;
         x3-=0.2;
        if(valor_x<=float(-1.1) and valor_x>float(-1.3))
        {
         valor_x=1.0;
         x1=1.0;
         x2=1.0;
        }


        glutPostRedisplay();
    }

    if(key==GLUT_KEY_RIGHT)
    {
        valor_x+=0.2;
         x1+=0.2;
         x2+=0.2;
         x4+=0.2;
        if(valor_x>=float(1.1) and valor_x<float(1.3))
        {
         valor_x=-1.0;
         x1=-1.0;
         x2=-1.0;
        }

        glutPostRedisplay();
    }


}


int main(int argc, char *argv[])
{
  cerr << "main () \n";
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  glutInitWindowSize(500,500);
  glutCreateWindow("");
  glutDisplayFunc(display);
  glutKeyboardFunc(keyinput);
  glutSpecialFunc(specialKeyInput);
  glutMainLoop();
}


No hay comentarios:

Publicar un comentario