Programación Específica > OpenGL

 Pez 3D

(1/1)

politico6:
Hola a todos, necesito a partir de un pez hecho en 2D con transformaciones geométricas, con su zoom, movimientos de translación..etc.. a partir de eso hacerlo en 3D... y no se como hacerlo ni que funciones utilizar... alguien me puede echar una mano????? Gracias..
Os dejo el codigo:

--- Código: C --- #include <stdio.h>#include <string.h>#include <stdlib.h>#include <GL/gl.h>#include <GL/glu.h>#include <GL/glut.h> int alto=800;int ancho=800;float zoom=1.0, tx=0.0, ty=0.0; static void Init( void ){    glClearIndex( 0.0 );    glShadeModel( GL_FLAT );} static void Reshape( int width, int height ){       ancho=width;    alto=height;      glMatrixMode(GL_PROJECTION);    glLoadIdentity();       glViewport(0.1, 0.1, (GLint)width/2, (GLint)height/2);    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0);    glScalef(zoom,zoom,1.0);        glTranslatef(tx,ty,0.0);     glClearColor(0.0,0,0.7,0.0);    glClear( GL_COLOR_BUFFER_BIT );    glColor3f(0.0,0.0,0.0);        glMatrixMode(GL_MODELVIEW);     glLoadIdentity();    glCallList(2);                //primera figura izquierda abajo      glMatrixMode(GL_PROJECTION);    glLoadIdentity();       glViewport((GLint)width/2, 0.0, (GLint)width/2, (GLint)height/2);    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0);    glScalef(zoom,zoom,1.0);    glTranslatef(tx,ty,0.0);         glMatrixMode(GL_MODELVIEW);     glLoadIdentity();    glCallList(2);            //segunda figura derecha abajo      glMatrixMode(GL_PROJECTION);    glLoadIdentity();       glViewport(0, (GLint)width/2, (GLint)width/2, (GLint)height/2);    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0);    glScalef(zoom,zoom,1.0);    glTranslatef(tx,ty,0.0);         glMatrixMode(GL_MODELVIEW);     glLoadIdentity();    glCallList(2);            // tercera figura izquierda arriba      glMatrixMode(GL_PROJECTION);    glLoadIdentity();       glViewport((GLint)width/2, (GLint)width/2, (GLint)width/2, (GLint)height/2);    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0);    glScalef(zoom,zoom,1.0);    glTranslatef(tx,ty,0.0);         glMatrixMode(GL_MODELVIEW);     glLoadIdentity();    glCallList(2);            //cuarta figura derecha arriba      glFlush(); }   static void Key_Esc(unsigned char key, int x, int y ){    if (key==27)            exit(0);      if (key ==43){        zoom*=1.1;        Reshape(ancho,alto);    }    if (key==45){        zoom*=0.9;        Reshape(ancho,alto);    }}  static void Special(int key, int x, int y ){    if (key==GLUT_KEY_LEFT){                tx=tx-0.2;                Reshape(ancho,alto);    }           if (key==GLUT_KEY_RIGHT){        tx=tx+0.2;        Reshape(ancho,alto);    }    if (key==GLUT_KEY_UP){        ty=ty+0.2;        Reshape(ancho,alto);    }    if (key==GLUT_KEY_DOWN){        ty=ty-0.2;        Reshape(ancho,alto);    }}  static void triangulo (){       glNewList(1, GL_COMPILE);            glBegin(GL_TRIANGLES);        // Dibujamos un triángulo        glColor3f (1.0,0.6, 0.0);        // Color        glVertex3f(0.0,0.0,0.0);        // Coordenadas del primer vértice        glVertex3f(0.0,0.4,0.0);        // Coordenadas del segundo vértice        glVertex3f(0.4,0.0,0.0);        // Coordenadas del tercer vértice                glEnd();     glEndList();    // Terminamos de dibujar } static void cuadrado(){       glBegin(GL_QUADS);    glColor3f (1.0,0.6, 0.0);        //color    glVertex3f(0.0,0.0,0.0);    glVertex3f(0.0,0.2,0.0);    glVertex3f(0.2,0.2,0.0);        glVertex3f(0.2,0.0,0.0);     glEnd();} void pez(){       glNewList(2, GL_COMPILE);        glPushMatrix();    glTranslatef(0.0,0.0,0.0);    glRotatef(0.0,0.0,0.0,0.0);    glCallList(1);        glPopMatrix();        // cuerpo de pez 1     glPushMatrix();    glRotatef(180.0,1.0,0.0,0.0);    glCallList(1);    glPopMatrix();        // cuerpo de pez 2     glPushMatrix();    glTranslatef(0.0,0.2,0.0);    glRotatef(180.0,0.0,1.0,0.0);                                       glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // ala de arriba 1     glPushMatrix();    glTranslatef(-0.2,0.2,0.0);    glRotatef(180.0,1.0,0.0,0.0);                                       glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // ala de arriba 2     glPushMatrix();    glTranslatef(-0.2,-0.2,0.0);    glRotatef(0.0,0.0,0.0,0.0);                                     glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // ala de abajo 1        glPushMatrix();    glTranslatef(0.0,-0.2,0.0);    glRotatef(180.0,0.0,0.0,1.0);                                       glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // ala de abajo 2     glPushMatrix();    glTranslatef(-0.4,0.0,0.0);     glRotatef(0.0,0.0,0.0,0.0);                                     glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // cola 1       glPushMatrix();    glTranslatef(-0.4,0.0,0.0);    glRotatef(180.0,1.0,0.0,0.0);                                       glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // cola 2     glPushMatrix();    glTranslatef(0.5,0.1,0.0);    glRotatef(45.0,0.0,0.0,1.0);                                        glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // gota 1     glPushMatrix();    glTranslatef(0.5,0.38,0.0);    glRotatef(225.0,0.0,0.0,1.0);                                       glScalef(0.5,0.5,0.0);    glCallList(1);    glPopMatrix();        // gota 2        glEndList();} static void Display( void ){    Reshape(ancho,alto);}  int main( int argc, char **argv ){      glutInit(&argc, argv);   int a;   glutInitDisplayMode( GLUT_RGB );    glutInitWindowPosition(100,100 );   glutInitWindowSize(800, 800 );   glutCreateWindow("Pez con transformaciones geometricas");     Init();   triangulo();   pez();    glutReshapeFunc(Reshape);   glutDisplayFunc(Display);   glutKeyboardFunc(Key_Esc);   glutSpecialFunc(Special);      glutMainLoop( );      return 0;}  

Navegación

[0] Índice de Mensajes

Ir a la versión completa