Foros del Web » Programación para mayores de 30 ;) » Programación General »

ayuda en OpenGl por favor

Estas en el tema de ayuda en OpenGl por favor en el foro de Programación General en Foros del Web. hola, por favor ayudenme: para este codigo: SI LES DA FLOJERA LEER EL CODIGO, LO UNICO IMPORTANTE, Y DONDE ESTA EL ERROR, ES EN LA ...
  #1 (permalink)  
Antiguo 06/03/2007, 08:17
 
Fecha de Ingreso: marzo-2007
Mensajes: 1
Antigüedad: 17 años, 1 mes
Puntos: 0
ayuda en OpenGl por favor

hola, por favor ayudenme:
para este codigo:

SI LES DA FLOJERA LEER EL CODIGO, LO UNICO IMPORTANTE, Y DONDE ESTA EL ERROR, ES EN LA FUNCION void reshape(), ASI QUE LEAN ESA SOLAMENTE

#include <conio.h>
#include <GL/glut.h>
#include <stdio.h>

void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'h':
printf("help\n\n");
printf("c - Toggle culling\n");
printf("q/escape - Quit\n\n");
break;
case 'c':
if (glIsEnabled(GL_CULL_FACE))
glDisable(GL_CULL_FACE);
else
glEnable(GL_CULL_FACE);
break;
case '4':
glRotatef(1.0,1.,0.,0.);
break;
case '2':
glRotatef(1.0,0.,1.,0.);
break;
case '1':
glRotatef(1.0,0.,0.,1.);
break;

case 'q':
case 27:
exit(0);
break;
}
glutPostRedisplay();

}

void reshape(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(height==0){height=1;}
if(width==0){width=1;}
gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);



}



void display(void) {
glClearColor(1.0, 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glutWireTorus(0.25,0.75, 28, 28);
glColor3f(0.0,0.0,1.0) ;
glutWireCube(.60) ;

glutSwapBuffers();

}


int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(512, 512);
glutInitWindowPosition(20, 20);
glutCreateWindow("tecnunLogo");
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
//---------------------------------------------------------------------------

como comentario al ejecutar el codigo:
-al presionar c se activa o desactiva el GL_CULL_FACE
-al presionar 4 , 1 y 2 se rota la figura(un toroide con un cubo dentro de el) en torno a los ejes
-al presionar q se sale del programa

el error sucede cuando ejecuto el programa y roto la figura, luego minimizo, maximizo o reescalo la figura vuelve a estar como en el principio y pierde todas sus transformaciones.
En cambio si roto en torno a los ejes y solo muevo la ventana o la oculta(es decir, sin maximizar, minimizar o escalar) las transformaciones de la figura se mantiene.
POR FAVOR AYUDENME

GRACIASSS.
  #2 (permalink)  
Antiguo 06/03/2007, 11:04
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: ayuda en OpenGl por favor

que tal,

bueno, yo no trabajo con glut porque no me gusta, se me hace muy desordenado y no tiene tantas opciones.

Pero si comentas esta linea:
//glutReshapeFunc(reshape);

tu problema se solucionara.

Te explico:
cuando llamas a esa funcion, estas "re-inicializando opengl", ya que estas cambiando las matrices con las que trabajas y las estas reseteando. Si quieres evitar que pase eso, debes de buscar una forma de guardar los estados de tus matrices.

En mis codigos, tu funcion de "reshape" solo la mando a llamar cuando inicializo todo, y jamas la vuelvo a utilizar (de hecho, yo le llamo "InitOpenGL"). Y aun asi, es posible hacerle cambios a la ventana sin que se vean afectados mis dibujos. No estoy seguro como trabaje glut con su reshape, pero lo que puedo ver es que eso no deberia estarse llamando cada frame sin guardar previamente los estados. Sinceramente no se como resolver el problema si NO comentas esa funcion....

Mi recomendacion:
en cuanto puedas, deja de usar glut para manejar tus ventanas y eventos y cambiate a Allegro o SDL.
Cualquiera de los 2 son mas versatiles, con mas funciones y muchisimo mas ordenados, y claro, tambien son multiplataforma

http://alleg.sourceforge.net/index.es.html
http://www.libsdl.org/

Espero te haya servido mi "ayuda"....

saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:53.