/
Inicio :: Foros

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

OpenGL

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



Registrado: 14 Abr 2011
Mensajes: 75

MensajePublicado: 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

MensajePublicado: 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.

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Í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