Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Orden de construcción del terreno

Iniciado por Cronodragón, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Cronodragón

                                Ya tengo mi algoritmo de terreno listo, pero me queda un problemilla que no se si es mi culpa o de DirectX, o talvez haya un truco para quitarmelo de encima. Resulta que cuando construyo el terreno debo comenzar desde el fondo acercandome hasta la cámara, de otra forma no se dibuja bien. Pero cuando me muevo con la cámara y miro por detrás del terreno, resulta que se dibuja alrevés. Cómo hago para solucionar esto?, alguien ha sufrido el mismo problema? Gracias.

- Marco
                               

Drácula

                                Significa que no tienes el ZBuffer establecido, o que no lo borras al hacer un Clear.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Cronodragón

                                Creo que más bien podría ser lo del ZBuffer, cómo puedo cambiarlo?                                

AgeR

                                Este es el código que gasto yo (estoy empezando, pero creo que es la forma estandar)

Activar el Z-Buffer :
m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

Borrar el Z-Buffer :
m_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

Espero que te sirva :sonriendo:                                

Lord Trancos

                                Acuerdate tambien de crearlo al iniciar DirectGraphics...

El "present parameters" que le envias a IDirect3D8.CreateDevice tiene que tener:

EnableAutoDepthStencil := true;
AutoDepthStencilFormat := D3DFMT_D16; // o bien D3DFMT_D32 para un z-buffer de 32bits

_________________
(Ignore Mode for [WhiteBlaizer] and [x-alien] is enabled.)
SaludoteZ de Lord Trancos!
www.dxlab.tk - dxlab.host.sk - programación de DirectX con Delphi.


[ Este Mensaje fue editado por: Lord Trancos el 2002-09-14 15:30 ]                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

AgeR

                                Ups es cierto, olvidé esa parte.                                

Cronodragón

                                De maravillas!!! Funca perfectamente! Mil gracias.

Solo para no quedarme con la duda, que es lo que hace el ZBuffer exactamente? Ordena las primitivas para que se dibujen correctamente?

- Marco                                

BeRSeRKeR

                                Es un buffer donde se van almacenando las profundidades de los pixels que se van pintando. Por defecto, si la profundidad del pixel que se va a pintar es mayor que la del pixel que ya existía en esa posición del buffer pues no se pinta, de lo contrario sí que se pinta...

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

Mars Attacks

                                Es el buffer del eje Z (profundidad) :ojo:
Berserker se me ha adelantado :sonriendo:                                

Cronodragón

                                Hmm, ya veo. Entonces debe haber un orden optimo para facilitarle el trabajo a DX?                                

jpastor

                                Si no usas Zbuffer lo que tienes que hacer es dibujar primero los poligonos que esten mas lejos de la camara (creo que se llama algoritmo del pintor), pero con este metodo no se dibuja bien si dos poligonos se cortan.

Usando zbuffer no tienes que preocuparte por eso a menos que uses transparencias, que entonces antes de renderizar tendrias que ordenar caras.                                

Mars Attacks

                                Al DX y a cualquier otro sistema que utilices. El Z-Buffer es una técnica de ordenamiento; no importa qué utilices para pintar los elementos en pantalla, con el algoritmo Z-Buffer (que no sólo es un buffer, también es el algoritmo que rellena ese buffer) el programa le dice a la escena qué partes serán visibles desde el punto de vista de la cámara y cuáles no.
No sé si me he explicado bien.                                

Mars Attacks

                               
Citar
El 2002-09-14 22:23, jpastor escribió:
Si no usas Zbuffer lo que tienes que hacer es dibujar primero los poligonos que esten mas lejos de la camara (creo que se llama algoritmo del pintor), pero con este metodo no se dibuja bien si dos poligonos se cortan.

Hay otros algoritmos aparte del Z-buffer: El del pintor, el de trazado de rayos, el de Warnock, el de Weiler-Atherton, las líneas de barrido... pero el más usual es el z-buffer, ya que no precisa ordenación, maneja todo tipo de escenas, el tamaño que ocupa en memoria es el del tamaño de la escena, y la más importante, que actualmente todas las tarjetas gráficas lo tienen implementado por hardware.
El algoritmo es el siguiente:

Algoritmo Z-Buffer
 Inicializar imagen a color del fondo
 Inicializar zbuffer a la z de máximo alejamiento

 para cada polígono
   para cada píxel en la proyección del polígono {
     z:=z(x,y)
     si z más cercana que zbuffer(x,y) {
       zbuffer(x,y):=z
       escribir pixel (x,y) al color conveniente } }

fin Z-Buffer

Información cortesía de mis apuntes de gráfica :ojo:
Espero que te aclare un poco el asunto :sonriendo:


[ Este Mensaje fue editado por: Mars Attacks el 2002-09-14 22:35 ]                                

Cronodragón

                                Perfectamente entendido, gracias :riendo:                                

Lord Trancos

                               
Citar
Usando zbuffer no tienes que preocuparte por eso a menos que uses transparencias, que entonces antes de renderizar tendrias que ordenar caras.

No hace falta ordenar las caras. Para dibujar objetos transparentes basta con desactivar el backface culling y la escritura en el z-buffer.                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.






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.