Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Escenarios Grandes

Iniciado por sés, 07 de Abril de 2004, 12:13:16 PM

« anterior - próximo »

sés

 ¿Cómo puedo visualizar un escenario enorme con OpenGL?

Me explico, estoy empezando a trastear con las 3D y no sé si mi duda es una chorrada o no.
Lo que tengo es un escenario enorme, digamos de unas 10000x10000 unidades (o más) y no consigo configurar los parámetros de la vista para que se vea bien del todo.

Lo ideal sería que los planos de corte fueran 0 - 10000, pero si hago eso los polígonos se muestran como les da la gana, mostrándose los más alejados sobre los más cercanos.
Si pongo 1 - 10000, el efecto es menos desastroso, pero aun así se siguen montando los polígonos.
Solo se ve bien si pongo 10 - 10000, pero entonces tengo otro problema: el plano cercano lo tengo a 10 y los polígonos me desaparecen antes de acercarme a ellos (nooo). Esto solo serviría si estuviera siempre desde el aire.

¿Hay alguna solución?
Soy indeciso... ¿o no?

seryu

 no te acerques demasiado a ellos, si ves cualqier programa 3d, cuando 'entras' dentro de un modelo, el poligono en el que estas metido solo se dibuja hasta cierta distancia de la camara.


sés

 En cualquier FPS puedes pegarte a una pared.
Soy indeciso... ¿o no?

fiero

 Deberia funcionar bien con 1-10000. ¿Cómo creas la matriz de proyección?
www.videopanoramas.com Videopanoramas 3D player

Mars Attacks

 Poner el valor 0 como mínimo de clipping me dio problemas en clase de programación gráfica. Es una gilipollez, pero a mí se me solucionó poniendo 0.000001. Prueba suerte ;)

BeRSeRKeR

 Lo normal es que el near plane sea más o menos 1.0.

Otra cosa que podría estar causando el problema son los bits que le hayas puesto al depth buffer (16, 24, 32).

Por lo que dices doy por hecho que tienes activado el depth buffer y que lo limpias en cada frame.

En lo referente a que poniendo un near plane de 10 se cortan los polígonos cuando te acercas, si implementas detección de colisiones, podrías ponerle un radio de 10 a la esfera que engloba la cámara. De esa forma evitarías el recorte de polígonos a esa distancia (lo que no sé es si 10 sería una distancia que no permitiría acercarse demasiado a los polígonos...).

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

sés

 
CitarDeberia funcionar bien con 1-10000. ¿Cómo creas la matriz de proyección?
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 45.0f, 800.0f/600.0f, 10.0f, 10000.0f );


CitarEs una gilipollez, pero a mí se me solucionó poniendo 0.000001
A mí no <_<

CitarOtra cosa que podría estar causando el problema son los bits que le hayas puesto al depth buffer (16, 24, 32).
¿Cómo sé lo que tengo y cómo lo cambio?

CitarPor lo que dices doy por hecho que tienes activado el depth buffer y que lo limpias en cada frame.
Sí, o no lo vería bien aunque cambiara los planos.

Citar
En lo referente a que poniendo un near plane de 10 se cortan los polígonos cuando te acercas, si implementas detección de colisiones, podrías ponerle un radio de 10 a la esfera que engloba la cámara. De esa forma evitarías el recorte de polígonos a esa distancia (lo que no sé es si 10 sería una distancia que no permitiría acercarse demasiado a los polígonos...).
Psé... esas 10 unidades son metros. No poder acercarte a menos de 10 metros de una pared queda algo rarillo :huh:  
Soy indeciso... ¿o no?

shash

1)  Un near plane demasiado pequeño, da errores, nada de 0.00001, con eso solo conseguiras que la mitad de las targetas muestren glitches.

2) Una distancia extremadamente grande entre el near plane y el far plane, tb da problemas. Para eso, opengl acepta floats, doubles, etc. Es decir, nada de 1/10000, escalalo de forma correcta. Yo trabajo normalmente con 0.5f / 100.0f, y no tengo ningun problema.

3) Chequea de cuantos bits es el depth buffer que te devuelve ChoosePixelFormat.

Con esto todo deberia irte bien, a no ser que tengas algun bug no asociado al depth buffer.
Por cierto, esto de arriba lo explica cualquier tutorial/libro de iniciación a opengl, a ver si leemos mas...

Lord Trancos 2

 1.0 = 1 metro ¿?

entonces 10000 = 10km!!!!!

no crees que quieres ver demasiado lejos? :P

Un truco (un pelin cutre y complicao) seria dibujar todo lo que estuviera a mas de 1000 (por ejemplo) con un near de 1000 y un far de 10000 (por ejemplo) y despues limpiar el z-buffer y dibujar encima todo lo que estuviera a corta distancia (con un near de 0.25 y un far de 1000).

No deberias de tener problemas si no te "rallas" con las distancias :P
Y si aun asi quieres rayarte dale mas profundidad al z-buffer.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

seryu

 haz un
glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


sés

 
Citar
Una distancia extremadamente grande entre el near plane y el far plane, tb da problemas. Para eso, opengl acepta floats, doubles, etc. Es decir, nada de 1/10000, escalalo de forma correcta. Yo trabajo normalmente con 0.5f / 100.0f, y no tengo ningun problema.
Vale, digamos que lo escalo todo... ¿0.01? 100 veces más pequeño, ¿no? entonces 0.5*100 = 50m ^_^, creo que no soluciono mucho.
Ya he probado a escalarlo, pero si reduzco el mapa y reduzco el plano cercano... como que me quedo igual: Sigo sin poder pegarme a una pared.

Citar
Por cierto, esto de arriba lo explica cualquier tutorial/libro de iniciación a opengl, a ver si leemos mas...
Me imagino que mis distancias dan problemas por los planos de corte, pero en ningún sitio he visto nada de eso.

Citar
no crees que quieres ver demasiado lejos?
Precisamente por eso planteo el problema. Quiero ver 10Km de distancia. Si estuviera a pie no sería un gran problema, pero quiero verlo también desde el aire y necesito verlo todo.

Citar
glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Ya lo hago.
Soy indeciso... ¿o no?

sés

 A ver si esto me ayuda:

Como ya he dicho, estoy pez en esto, así que... ¿por qué no es lo mismo 10-10000 que 1-1000?
Si pongo 10-10000, se ve todo perfecto (salvo que no pueda acercarme a menos de 10 de un muro), pero si pongo 1-1000 se ve todo fatal.

¿No es la misma distancia? :blink:  
Soy indeciso... ¿o no?

shash

 
Citar¿por qué no es lo mismo 10-10000 que 1-1000?

Porque no es lo mismo si cobras 300€ al mes que si cobras 600€? Simplemente, la cantidad es diferente!
En un ordenador, y en todos los sistemas digitales que conozco, el sistema de numeracion es finito, a diferencia de la realidad, con lo cual estas limitado a ciertas cantidades, y hay ciertos errores de precisión (por ejemplo el Epsilon de los floats, etc, etc).

Si hubieras leido algun tutorial, o tuvieras unos minimos conocimientos de programacion, sabrias que 16 bits de depthbuffer, proporcionan baja precision, con lo cual la distancia near plane - far plane no puede ser abismal (ni la precisión en ella). Aunque deberia sobrarte si no haces algo muy tocho. Escala el m* escenario, y pones un near plane mas pequeño, y podras acercate a la dichosa pared. Yo lo he programado centenares de veces, y funciona. Si no es asi, es el momento de comprarte un libro de opengl, y leerlo tranquilamente, yo lo hice en su momento, y es lo mejor.

Lord Trancos 2

 
Cita de: "sés"
Citar
no crees que quieres ver demasiado lejos?
Precisamente por eso planteo el problema. Quiero ver 10Km de distancia. Si estuviera a pie no sería un gran problema, pero quiero verlo también desde el aire y necesito verlo todo.

Entonces aumenta el near y el far conforme la camara va dejando el suelo.

En el suelo; near = 0.25 far = 1000
A media altura; near = 10 far = 5000
A mucha altura; near = 100 far = 10000

por ejemplo :-)

Eso seria para dibujar el suelo.
Si despues quieres dibujar cosas en el cielo; borrar el depth buffer, asigna nuevos valores para el near/far y dibuja.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

sés

 
Cita de: "shash"
Porque no es lo mismo si cobras 300€ al mes que si cobras 600€? Simplemente, la cantidad es diferente!
A lo que me refería es que con 10-10000 se ve bien y con 1-1000 no.
10000 - 10 = 9990
1000 - 1 = 999
¿No se supone que la distancia entre los planos es menor y debería dar menos problemas?

Cita de: "shash"
Si hubieras leido algun tutorial, o tuvieras unos minimos conocimientos de programacion, sabrias que...
Vaya, tenemos a un "tío guay" que viene de la demoescene y se cree la repanocha. Tres mensajes en el foro y ya estás haciendo de menos a los demás. Mola.

He leído tutoriales (más bien estoy leyendo), entre ellos el de nehe, que es por el que más me guío, y no he visto nada sobre la precisión de los planos y de que haya que ponerlos pequeñitos.

También te puedo asegurar que sé programar perfectamente. No sé si serás tan bueno como quieres aparentar, pero te aseguro que no necesito los consejos de ningún prepotente.

Cita de: "shash"
Aunque deberia sobrarte si no haces algo muy tocho.
Si leyeras desde el principio, o tuvieras unos mínimos conocimietos de lectura, sabrías que mi problema es precisamente por que quiero hacer algo tocho.

Cita de: "shash"
Escala el m* escenario, y pones un near plane mas pequeño, y podras acercate a la dichosa pared.
Vaya, de nuevo no has leído. Como ya expliqué, si tengo 10 unidades = 10m., si escalo todo (digamos 0.1) y reduzco el plano cercano (digamos 0.1), 0.1 unidad será = 10m, por lo que me quedo igual. Eso se aprende en el cole cuando te enseñan a multiplicar.

Quizás sea el momento de comprar una cartilla y una tabla de multiplicar, y leerlo tranquilamente, yo lo hice en su momento, y es lo mejor.


Una guía de buenas maneras tampoco te vendría mal. Baja esos humos.
Soy indeciso... ¿o no?






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.