Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con el Z-Buffer y render to surface

Iniciado por Lord Trancos, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Lord Trancos

                                Estoy probando lo de renderizar en una textura y todo me ha ido de maravilla hasta que me ha dado por usar el z-buffer. :triste:

para crear el interfaz RenderToSurface le digo esto:



D3DXCreateRenderToSurface(D3DDEV8, 256, 256, D3DDEVPPAR8.BackBufferFormat, true,

D3DDEVPPAR8.AutoDepthStencilFormat, G_RTOS)



y despues para dibujar hago esto:



 _vp.X := 0;

 _vp.Y := 0;

 _vp.Width  := 256;

 _vp.Height := 256;

 _vp.MinZ := 0;

 _vp.MaxZ := 1;

 G_RTOS.BeginScene(G_Surf0, _vp);



 D3DDEV8.Clear(0, NIL, D3DCLEAR_ZBUFFER or D3DCLEAR_TARGET, $FF800000, 1.0, 0);



 // render teapot

 G_Mesh0.DrawSubset(0);



 // End the scene.

 G_RTOS.EndScene;



La cuestion es que yo diria que funciona y me renderiza la tetera correctamente, el problema es que despues cuando intento dibujar (en pantalla) un panel (quad) con esa textura,.... parece como si no me limpiara correctamente el z-buffer de esta escena y quedaran restos del renderizado de la tetera, ... :triste:

lo que hago para renderizar el panel es esto:



 // Begin the scene.

 D3DDEV8.BeginScene;



 // Clear the back buffer to a blue color.

 D3DDEV8.Clear(0, NIL, D3DCLEAR_ZBUFFER or D3DCLEAR_TARGET,

               $FF000080, 1.0, 0);



 // disable lighting

 D3DDEV8.SetRenderState(D3DRS_LIGHTING, 0);



 // disable culling

 D3DDEV8.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);



 // Set stream source and vertex shader

 D3DDEV8.SetStreamSource(0, G_Mesh1, SizeOf(TCustomVertex));

 D3DDEV8.SetVertexShader(C_FVF_CUSTOMVTX);

 D3DDEV8.SetTexture(0, G_Text0); // <-- esta es la textura con la tetera renderizada en ella

 D3DDEV8.DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);



 // End the scene.

 D3DDEV8.EndScene;



 // Display scene.

 D3DDEV8.Present(NIL, NIL, 0, NIL);



en fins... a ver si alguien sabe donde he metido la gamba :triste:


_________________
SaludoteZ de Lord Trancos!
www.dxlab.tk - programación de DirectX con Delphi.


[ Este Mensaje fue editado por: Lord Trancos el 2002-09-07 19:10 ]

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

Lord Trancos

                                Weno.... al final a base de probar, creo que lo he conseguido hacer con SetRenderTarget.... pero me las he visto canutas pa ver de sacarlo...
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Lord Trancos

                                Weno... por ahora la tecnica que uso consiste en usar el mismo z-buffer que uso para renderizar la escena. Y funciona.... peroooooo.... tiene un problema; y es que no puedo usar una textura con alguna de sus dimensiones mas grandes que las que tiene el zbuffer.

Asi en el modo de video 320x240 no puedo usar una textura de 256x256. Y en 640x480 imagino que no podre usar texturas de 512x512..... :triste:

Asi que he vuelto a intentar crear una surface del tamaño de la textura para usarla de zbuffer y asignarla con SetRenderTarget, pero nada, parece que pasa de ella y sigue usando el z-buffer de la escena... :triste:

Alguien sabe si las viejas tarjetas 3D como la mia (voodoo banshee) no pueden usar un z-buffer que no sea el de la escena... ?


                               
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.