| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
cazagavilan
Registrado: 14 Abr 2011 Mensajes: 75
| Publicado: 25/04/2012 12:46 pm | | | Título: OpenGL |
| Hola!
Se supone que tengo que crear un triangulo y rotarlo a 45 grados en el eje y el problema esta en que en el curso que hago no explica bien la implementacion de glRotatef... y me da error.
| Código: | #include <Windows.h> #include <gl\glut.h> #include <gl\gl.h> #include <gl\GLU.h> void animacion(void); void init(void); void dibujar(void); void redimensionar(int, int); void teclado (unsigned char, int); void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
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(); glRotatef(45, 0, 0, 1); // Primera cara glBegin(GL_TRIANGLES); glColor3f(1.0,0.5,1.0); glVertex3f(0,1,0); glVertex3f(1,0,1); glVertex3f(-1,0,1); glEnd(); // Segunda cara glBegin(GL_POLYGON); glColor3f(1.0,1.0,0.0); glVertex3f(0,1,0); glVertex3f(-1,0,1); glVertex3f(-1,0,-1); glEnd(); // Tercera cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(-1,0,-1); glVertex3f(1,0,-1); glEnd(); // Cuarta cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(1,0,-1); glVertex3f(1,0,1); glEnd(); glPopMatrix(); glutSwapBuffers(); }
void teclado(unsigned char key, int x, int y) { if(key==27) exit(0); }
void main( int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(320,240); glutCreateWindow("Intro");
// Registrar funciones init(); glutIdleFunc(animacion); glutKeyboardFunc(teclado); glutDisplayFunc(dibujar); glutReshapeFunc(redimensionar);
// Bucle de eventos principal glutMainLoop(); } |
Muchas gracias. |
| | Volver arriba | |  | cazagavilan
Registrado: 14 Abr 2011 Mensajes: 75
| Publicado: 26/04/2012 6:47 am | | | Título: |
| Solucionado.
| Código: | #include <gl\glut.h>
void init(void); void dibujar(void); void redimensionar(int, int); void teclado (unsigned char, int);
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(); glRotatef(45, 0, 0, 1); // Primera cara glBegin(GL_TRIANGLES); glColor3f(1.0,0.5,1.0); glVertex3f(0,1,0); glVertex3f(1,0,1); glVertex3f(-1,0,1); glEnd(); // Segunda cara glBegin(GL_POLYGON); glColor3f(1.0,1.0,0.0); glVertex3f(0,1,0); glVertex3f(-1,0,1); glVertex3f(-1,0,-1); glEnd(); // Tercera cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(-1,0,-1); glVertex3f(1,0,-1); glEnd(); // Cuarta cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(1,0,-1); glVertex3f(1,0,1); glEnd(); glutSwapBuffers(); }
void teclado(unsigned char key, int x, int y) { if(key==27) exit(0); }
void main( int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(320,240); glutCreateWindow("Intro");
// Registrar funciones init(); glutKeyboardFunc(teclado); glutDisplayFunc(dibujar); glutReshapeFunc(redimensionar);
// Bucle de eventos principal glutMainLoop(); } |
|
| | Volver arriba | |  | untio

Registrado: 17 Sep 2008 Mensajes: 380 Ubicación: MICA S.A.
| Publicado: 26/04/2012 8:51 am | | | Título: |
| Hola,
Perdona que me entrometa. Yo estoy justo empezando a aprender OpenGl. He visto que quieres rotar respecto al eje y con Rotatef(45, 0, 0, 1).
Creo que te equivocas y que rotas respecto a z. Rotatef(angulo, eje x,eje y, eje z).
x -> izquierda/derecha y -> arriba/abajo z -> dentro/fuera (de la pantalla).
Me he permitido modificar tu código para que veas la rotación con más claridad.
A mí me produce un fallo de segmentación al acabar, pero puede ser porque lo ejecuto dentro de una máquina virtual en VirtualBox.
| Código: | #include <gl\glut.h>
void init(void); void dibujar(void); void redimensionar(int, int); void teclado (unsigned char, int, int);
float angulo = 0;
void idlef() { angulo += 0.2; if(angulo >= 360.0) angulo = 0; glutPostRedisplay(); }
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(); glRotatef(angulo, 0, 0, 1); // Primera cara glBegin(GL_TRIANGLES); glColor3f(1.0,0.5,1.0); glVertex3f(0,1,0); glVertex3f(1,0,1); glVertex3f(-1,0,1); glEnd(); // Segunda cara glBegin(GL_POLYGON); glColor3f(1.0,1.0,0.0); glVertex3f(0,1,0); glVertex3f(-1,0,1); glVertex3f(-1,0,-1); glEnd(); // Tercera cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(-1,0,-1); glVertex3f(1,0,-1); glEnd(); // Cuarta cara glBegin(GL_POLYGON); glColor3f(0.5,0.9,1.0); glVertex3f(0,1,0); glVertex3f(1,0,-1); glVertex3f(1,0,1); glEnd(); glutSwapBuffers(); }
void teclado(unsigned char key, int x, int y) { if(key==27) exit(0); }
int main( int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(320,240); glutCreateWindow("Intro");
// Registrar funciones init(); glutKeyboardFunc(teclado); glutDisplayFunc(dibujar); glutReshapeFunc(redimensionar); glutIdleFunc(idlef);
// Bucle de eventos principal glutMainLoop(); }
|
Al principio no me compilaba porque declarabas main como void y la función que lee el teclado no coincidía en su declaración con su implementación (los parámetros).
Perdóname si me equivoco. _________________ Hago algo muy raro: primero leo las instrucciones. |
| | Volver arriba | |  | | cazagavilan
Registrado: 14 Abr 2011 Mensajes: 75
| Publicado: 26/04/2012 10:07 am | | | Título: |
| Tienes razon era sobre el eje Z XD... y la funcion void idlef() me habian dicho de implementarla pero la verdad es que no sabia como( no me lo habian explicado)...
Saludos! |
| | Volver arriba | |  | cazagavilan
Registrado: 14 Abr 2011 Mensajes: 75
| Publicado: 26/04/2012 10:18 am | | | Título: |
| | Me acabo de dar cuanta que la funcion idlef() me la piden un pelin mas hacia delante... aun no XD. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|