Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





evitar el corte en la figura por nearplane,y tamaño de perso

Iniciado por xeex, 29 de Mayo de 2007, 10:59:14 PM

« anterior - próximo »

ethernet

Cita de: "marcode"
Cita de: "ethernet"lo de cambiar la matriz de proyección en función del objeto puede salir un churro de cuidado...

Si no se sabe lo que se hace... desde luego.

Desde luego, sobretodo viendo el cálculo de la matriz de proyección(*) y el código que tú has puesto

(*) http://www.glprogramming.com/red/appendixf.html ultimas matrices

marcode

No sé si el código que puse antes estará bien porque lo he puesto de memoria, pero poderse se puede hacer como se puede ver en este juego.

Desde 1 cm hasta cientos de Kms vistos simultáneamente modificando la matriz de proyección y sin ningún fallo ni artefactos.

http://www.megaupload.com/?d=KAAC1K8M
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

tamat

Cita de: "ethernet"tamat me gustan las imágenes, usas lightmaps no?

es una mesh que hice con el sketch up, con lightmaps generados con el 3ds studio 8 (lighttracer)
Por un stratos menos tenso

xeex

hola, gracias por todos los comentarios.
Me pueden enviar la funcion en donde uds agrandan o disminuyen el near plane, no se que estare haciendo mal yo.
Miren yo lo hago en mi funcion reshape la que solo llamo al principio solo una vez ya que mi programa no necesita modo windowed asi que nunca hago reshape a la escena, solo uso la funcion reshape para dar la proyeccion a la escena nada mas(nunca mas la vuelvo a llamar):

void reshape(GLsizei w, GLsizei h)
{
allegro_gl_begin();
glMatrixMode (GL_PROJECTION);                  
glLoadIdentity ();                            
glFrustum (-1.0, 1.0, -1.0, 1.0, 2.0, 500.0);
glMatrixMode (GL_MODELVIEW);      
glViewport (0, 0, w, h);                    
allegro_gl_end();
}

main()
{
reshape();
do
 {
   //loop en donde llamo a las diversas funciones de
   //dibujado,teclas,mouse,etc
 }while();
}
le pongo algo menos que 1.0 y ya se deforma demasiado .
que estoy haciendo mal?
GRACIAS.

tamat

Por un stratos menos tenso

marcode

Si modificas la distancia entre el near y el far, también modificas el campo de visión, por lo que tienes que ajustar también su volumen.

gluPerspective calcula el tamaño a partir de esos parámetros, pero también lo puedes hacer con glFrustum.  Esta es la función que uso yo donde se puede ver que se calcula previamente el volumen a partir del near multiplicado por la tangente del fov, y se ajusta a la relación de aspecto ancho/alto de la vista

Citar
void SetPerspective(float fov, float aspect, float zNear, float zFar)
{
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   GLfloat range = zNear * tan(fov*PI/360);
   glFrustum(-range*aspect,range*aspect,-range, range, zNear, zFar);
}

al igual que con gluPerspective, se le pasa el ángulo de visión, la relación de aspecto (normalmente el ancho dividido por el alto de la vista), y los planos de corte.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

xeex

GRACIAS tamat y marcode.
Yo no uso glut, asi que no tengo gluperspective.

Mmmm voy a probar esa funcion.
¿Pero esto resolvera el problema inicial que tengo  de que el near deje de cortar la figura?
Quiero que se vea como los screenshot de tamat(en la pagina anterior) que sea "la pantalla la que corte la figura".

Muchas gracias por responder.
Saludos.

Buffon

Cita de: "xeex"GRACIAS tamat y marcode.
Yo no uso glut, asi que no tengo gluperspective.

Mmmm voy a probar esa funcion.
¿Pero esto resolvera el problema inicial que tengo  de que el near deje de cortar la figura?
Quiero que se vea como los screenshot de tamat(en la pagina anterior) que sea "la pantalla la que corte la figura".

Muchas gracias por responder.
Saludos.

gluPerspective no es de glut, sino de opengl.

http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/perspective.html

marcode

Cita de: "xeex"¿Pero esto resolvera el problema inicial que tengo  de que el near deje de cortar la figura?
Quiero que se vea como los screenshot de tamat(en la pagina anterior) que sea "la pantalla la que corte la figura".

Con gluPerspective (glu.h) o una función que haga lo mismo como la que he puesto antes, puedes reducir la distancia al near plane por debajo de 1.0 para solucionar ese problema. Pero tienes que tener en cuenta que la precisión disminuirá si el far plane es demasiado grande, y pueden aparecer fallos.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ethernet

gluPerspespective es de la librería de utilizadades de opengl, y se ejecuta en espacio de usuario.

Este documento es buenísimo:

http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html

xeex

GRACIAS Buffon por la correcion.
Ah no tenia idea que no tenia nada que ver con glut. Es que una vez lei por ai que una libreria  que se llamaba glaux.h ya no habia que usarla por que ya estaba caduca y ai me enrede y la confundi con glut.h ....jajaj. bueno no recuerdo bien,algo asi. Lo cierto es que no utilizo nada que empieze con glu.

Gracias por las respuestas y los links.
SALUDOS






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.