Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





D3DXSprite sin filtro

Iniciado por cht, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

cht

                                Hola a todos,
Hay alguna manera de dibujar un sprite con el D3DXSprite del DX8 sin aplicar un suavizado al escalarlo, es decir, que se vean los texels? gracias                                

Lord Trancos

                                has probado con algo asin ?



ID3DXSprite._Begin;

IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MAGFILTER, ord(D3DTEXF_POINT));
IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MINFILTER, ord(D3DTEXF_POINT));

ID3DXSprite.Draw(....);

ID3DXSprite._End;



por cierto, pq quieres ver los puntos ?                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

cht

                                creo que si que lo he probado, pero parece como si el sprite tuviera su propio estado. En realidad lo que quiero es hacer un juego 2d en el que el tio que llevas esta formado por 3 sprites distintos. Lo que pasa es que al dibujarlos me suaviza los bordes y entonces no encajan bien... no se si me explico.

por cierto, aprovecho para felicitarte por tu web y tutoriales que son una pasada.

hasta otra                                

Lord Trancos

                                Pos yo lo acabo de provar y funciona :lengua:

Si no recuerdo mal, si llamas al metodo Draw sin llamar al metodo _Begin antes, el metodo Draw lo llama el solito, y lo que hace ese metodo (_Begin) es establecer los renderStates y textureStageStates adecuados.

Asi que si haces esto


IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MAGFILTER, ord(D3DTEXF_POINT));
IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MINFILTER, ord(D3DTEXF_POINT));

ID3DXSprite.Draw(....);
ID3DXSprite.Draw(....);
ID3DXSprite.Draw(....);


no funcionara. Pero si haces esto, si funcionara:


ID3DXSprite._Begin;

IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MAGFILTER, ord(D3DTEXF_POINT));
IDirect3DDevice8.SetTextureStageState(0, D3DTSS_MINFILTER, ord(D3DTEXF_POINT));

ID3DXSprite.Draw(....);
ID3DXSprite.Draw(....);
ID3DXSprite.Draw(....);

ID3DXSprite._End;


en cuanto al problema de que con el suavizado las texturas no te encajan, es curioso pq a mi no me pasa .... :-?

si quieres puedes enviarme una demo donde te pase eso y miro a ver si en mi pc tambien pasa. :ojo:

en cuanto a mi web, asias, asias :riendo:

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

BeRSeRKeR

                                Pues creo que lo de que los bordes no "encajen" debe ser porque el filtro bilineal calcula el color del texel en base a los texels adyacentes. Por eso puede ocurrir que en los bordes de la textura aparezcan píxels que no corresponden...

Un saludo
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos

                                Cierto, pero al llamar a _Begin, el pone los texture stage states D3DTSS_ADDRESSU y D3DTSS_ADDRESSV a D3DTADDRESS_CLAMP, con lo que lo que dices queda solventado. Osea que no deberia de pasar...                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

MChiz

                                Si, pero al hacer la interpolación de los pixels, le falta la info de la textura. Lo que hay que hacer es añadir esa info que falta ( aunque sea redundante ).
Un saludo!

< MChiz >                                

Lord Trancos

                                mande? :-?                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

cht

                                ya me funciona! hice una prueba empezando de nuevo y me fué a la primera, asi que debia tener el código un poco liado.
El problema con los bordes suavizados es debido que al aplicar el filtrado lineal los pixels del borde los filtra con los que se supone que son transparentes (en negro) y solo quedan transparentes los que son exactamente negros, al aplicar el colorkey... lo que decia berserker, vamos.
bueno, muxas gracias a todos.                                






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.