Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





glPushMatrix glPopMatrix

Iniciado por davirro, 13 de Julio de 2008, 12:05:11 PM

« anterior - próximo »

davirro

hola a todos, estoy practicando con PushMatrix y PopMatrix y por alguna razon no me funciona bien y me he quedado estancado.
Se supone que tendrian que salir dos triangulos
¿Alguien me puede dar una pista?
gracias

#include < windows.h >

#include < GL\gl.h >
#include < GL\glu.h >
#include < GL\glut.h >

void init( void )
{
glClearColor( 0.0 , 0.0 , 0.0 , 0.0 );
glEnable( GL_DEPTH_TEST );
glShadeModel( GL_SMOOTH );
glMatrixMode( GL_MODELVIEW );
gluLookAt( 0.5 , 0.5 , 8 , 0.5 , 0.5 , 0 , 0 , 1 , 0 );
}

void Keyboard( unsigned char key , int x , int y )
{
if ( key == 27 )  exit( 0 ) ;
}

void Redraw()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

//primera figura
glPushMatrix();
glTranslatef( -3 , 0 , -16  );
glRotatef( -45 , 0 , 0 , 1 );
glBegin( GL_TRIANGLES );
glColor3f( 0.0 , 0.0 , 1.0 );glVertex3f( 0 , 0 , 0 );
glColor3f( 0.0 , 1.0 , 0.0 );glVertex3f( 1 , 0 , 0 );
glColor3f( 1.0 , 0.0 , 0.0 );glVertex3f( 0.5 , 1 , 0 );
glEnd;
glPopMatrix();

//segunda figura
glPushMatrix();
glTranslatef( 3 , 0 , -16  );
glRotatef( 45 , 0 , 0 , 1 );
glBegin( GL_TRIANGLES );
glColor3f( 0.0 , 0.0 , 1.0 );glVertex3f( 0 , 0 , 0 );
glColor3f( 0.0 , 1.0 , 0.0 );glVertex3f( 1 , 0 , 0 );
glColor3f( 1.0 , 0.0 , 0.0 );glVertex3f( 0.5 , 1 , 0 );
glEnd;
glPopMatrix();

glutSwapBuffers();
}

void Reshape( int anchura , int altura )
{
glViewport( 0 , 0 , ( GLsizei ) anchura , ( GLsizei ) altura );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 35 , ( anchura / altura ) , 0.1 , 10000 );
glMatrixMode( GL_MODELVIEW );
}

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

init();

glutKeyboardFunc( Keyboard );
glutDisplayFunc( Redraw );
glutReshapeFunc( Reshape );

glutMainLoop();
}

davirro

En cambio si uso las funciones para crear primitivas si funciona

void Redraw()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();
glColor3f( 0.1 , 0.5 , 1.0 );
glTranslatef( 5 , 0 , 0  );
glutSolidSphere( 2 , 20 , 20 );
glPopMatrix();

glPushMatrix();
glColor3f( 0.8 , 0.5 , 0.1 );
glScalef( 1 , 2 , 1  );
glTranslatef( -1 , 0 , 0  );
glutSolidSphere( 2 , 20 , 20 );
glPopMatrix();

glutSwapBuffers();
}

Prompt

Los transladas fuera de pantalla y con glutSphere y tal no... fijate bien.

Depende de la perspectiva y tal pero tiene pinta de eso no ?

davirro

Lo he probado y no quedan fuera si comento uno y luego el otro, ademas otra cosa si quiero hacer una animacion, tampoco funciona

añado esta linea al main



glGlutIdleFunc(animate);

y esta funcion


void animate()
{
     glRotatef( 1 , 0 , 1 , 0 );
     glutPostRedisplay();
     Sleep( 100 );
}


y solo queda girado una vez[/code]

Prompt

Porque idle es cuando no se está usando la ventana, sino recuerdo mal.

idle = desocupado, inactivo, inerte

Buffon

lo que yo no entiendo es por que Visual Studio deja compilar con glEnd en vez de glEnd()

ponle los paréntesis y disfruta

davirro

:lol:  :lol:  :lol:
waaaaa!! gracias !! desdeluego ke ya me vale , tengo los ojos acartonaos de buscar por todos los lados , estaba ya pensado de comprar otro ordenador jajaja.

Prompt

Y no te fijas en si tiene errores la aplicacion!? no se para ni te da ningún aviso el visual studio?!

Buffon

Cita de: "Prompt"Y no te fijas en si tiene errores la aplicacion!? no se para ni te da ningún aviso el visual studio?!

visual studio no da ningún error ni warning con eso :P

PD: Otra cosa que va bien hacer cuando tienes errores es debuggarlo, que es lo que he hecho yo en el curro, y ver que esa linea se la sudaba, luego te fijas q le faltan los paréntesis :P

tamat

es que poner glEnd no es un error, es como poner 5, o si tienes una variable llamada pepito poner  pepito;

Simplemente es inutil, pero no es un error.
Por un stratos menos tenso

davirro

Ahi esta la cosa , no me di cuenta principalmente porque no me daba ninguna clase de error , haber si poco a poco me voy habituando :)

Buffon

He hecho una prueba rápida:

#include <iostream>

int myFuncion()
{
printf("holaaaa\n");
return 0;
}

int main()
{
myFuncion();
myFuncion;

return 0;
}



con Visual Studio:
Warning   1   warning C4551: function call missing argument list   e:\sandbox\vs2005tests\bugone\bugone\main.cpp   14   

desde debian:
main.cpp: In function int main():
main.cpp:13: warning: statement is a reference, not call, to function myFuncion






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.