/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Nueva duda OpenGL

 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
cazagavilan



Registrado: 14 Abr 2011
Mensajes: 75

MensajePublicado: 26/04/2012 11:37 am
Título: Nueva duda OpenGL

Buenas de nuevo!

Tengo que hacer que con la letra "p" se pause la funcion (animacion) y con la "a" se active...

No se si hay alguna forma para pausar funciones o tengo que hacer algun cambio en la funcion( ya lo he probado)..

Si podeis darme una pista.

Código:
#include <gl\glut.h>

void init(void);
void dibujar(void);
void dibujar2(void);
void dibujar3(void);
void redimensionar(int, int);
void teclado (unsigned char, int);
float angulo = 0;


void animacion()
{
    angulo += 0.2;
    if(angulo >= 360)
        angulo = 0;
    glutPostRedisplay();
}

void teclado(unsigned char key, int x, int y)
{
   if(key==27) exit(0);
   if(key==112) angulo = ;

   if(key==97) angulo + ;
   
}

void init(void)
{
   glClearColor(0.0,0.0,0.0,0.0);
   glEnable(GL_DEPTH_TEST);
   glShadeModel(GL_FLAT);
}

void redimensionar(int ancho, int alto)
{
   glViewport(0,0,(GLint)ancho, (GLint)alto);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(35,((float)ancho/alto), 0.1, 1000);
}

void dibujar(void)
{
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   gluLookAt(3,2,3,0,0,0,0,1,0);
   glPushMatrix();

   // Primera cara
   glTranslatef(1,0,0);
   glBegin(GL_POLYGON);
   glColor3f(1.0,0.0,0.0);
   glVertex3f(1,0,1);
   glVertex3f(0,0,1);
   glVertex3f(1,1,1);
   glVertex3f(0,1,1);
   glEnd();
   // Segunda cara
   glBegin(GL_POLYGON);
   glColor3f(0.0,1.0,0.0);
   glVertex3f(1,0,0);
   glVertex3f(0,0,0);
   glVertex3f(0,1,0);
   glVertex3f(1,1,0);
   glEnd();
   // Tercera cara
   glBegin(GL_POLYGON);
   glColor3f(0.0,0.0,1.0);
   glVertex3f(0,0,0);
   glVertex3f(0,0,1);
   glVertex3f(0,1,1);
   glVertex3f(0,1,0);
   glEnd();
   // Cuarta cara
   glBegin(GL_POLYGON);
   glColor3f(1.0,0.0,1.0);
   glVertex3f(0,1,1);
   glVertex3f(1,1,1);
   glVertex3f(1,1,0);
   glVertex3f(0,1,0);
   glEnd();
   // Quinta cara
   glBegin(GL_POLYGON);
   glColor3f(1.0,0.0,1.0);
   glVertex3f(0,0,1);
   glVertex3f(1,0,1);
   glVertex3f(1,0,0);
   glVertex3f(0,0,0);
   glEnd();
   // Sexta cara
   glBegin(GL_POLYGON);
   glColor3f(0.5,0.5,0.5);
   glVertex3f(1,0,1);
   glVertex3f(1,0,0);
   glVertex3f(1,1,0);
   glVertex3f(1,1,1);
   glEnd();
   //--------------Primera Piramide-------------
   glTranslatef(-1.5,0,0);
   glRotatef(angulo,0,1, 0);
   // cara Profunda
   glBegin(GL_TRIANGLES);
   glColor3f(1.0,0.5,1.0);
   glVertex3f(0,1,0); // Vertex Superior (donde se juntan todas las caras)
   glVertex3f(1,0,1); // Vertex Profundo-Izquierdo
   glVertex3f(-1,0,1); // Vertex Profundo-Derecho
   glEnd();
   // cara Derecha
   glBegin(GL_TRIANGLES);
   glColor3f(1.0,1.0,0.0);
   glVertex3f(0,1,0); // Vertex Superior ( donde se juntan todas las caras)
   glVertex3f(-1,0,1); // Vertex Profundo-Derecho
   glVertex3f(-1,0,-1); // Vertex AntiProfundo-Derecho
   glEnd();
   // cara AniProfunda
   glBegin(GL_TRIANGLES);
   glColor3f(0.5,0.9,1.0);
   glVertex3f(0,1,0);// Vertex Superior (donde se juntan todas las caras)
   glVertex3f(-1,0,-1);// Vertex AntiProfundo-Derecho
   glVertex3f(1,0,-1); // Vertex Antiprofundo-Izquierdo
   glEnd();
   // cara Izquierda
   glBegin(GL_TRIANGLES);
   glColor3f(0.7,0.9,1.0);
   glVertex3f(0,1,0); // Vertex Superior (donde se juntan todas las caras)
   glVertex3f(1,0,-1); // Vertex AntiProfundo-Izquierdo
   glVertex3f(1,0,1); // Vertex Profundo-Izquierdo 
   glEnd();
   // cara Inferior
   glBegin(GL_POLYGON);
   glColor3f(0.1,0.2,0.3);
   glVertex3f(1,0,1); // Vertex Profundo-Izquierdo
   glVertex3f(1,0,-1); // Vertex AntiProfundo-Izquierdo
   glVertex3f(-1,0,-1);// Vertex AntiProfundo-Derecho
   glVertex3f(-1,0,1); // Vertex Profundo-Derecho
   glEnd();
   glutSwapBuffers();
   
}

void main( int argc, char** argv)
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
   glutInitWindowSize(800,600);
   glutCreateWindow("Intro");

   // Registrar funciones
   init();
   glutKeyboardFunc(teclado);
   glutDisplayFunc(dibujar);
   glutReshapeFunc(redimensionar);
   glutIdleFunc(animacion);
   // Bucle de eventos principal
   glutMainLoop();
}


Muchas gracias.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 335
Ubicación: Argentina

MensajePublicado: 26/04/2012 1:02 pm
Título:

Se podría realizar de varias maneras, asi que muestro un ejemplo:
Código:

bool  bPausa = false;

void animacion()
{
    if( false == bPausa ) {
        angulo += 0.2;
        if(angulo >= 360)
            angulo = 0;
    }
   
    // fuera del ambito del if
    // para evitar overhead
    glutPostRedisplay();
}

void teclado(unsigned char key, int x, int y)
{
    const unsigned char KEY_ESC = 27;

    switch(key) {
        case KEY_ESC:
            exit(0);
            break;
        case 'p':
            bPausa = true;
            break;
        case 'a':
            bPausa = false;
            break;
    }
}


Saludos.
Volver arriba
Dirección AIM
cazagavilan



Registrado: 14 Abr 2011
Mensajes: 75

MensajePublicado: 26/04/2012 7:10 pm
Título:

Muchas gracias!
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com