Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: XÑA en 23 de Julio de 2008, 11:08:20 AM

Título: Ajuste de las coords de textura en DX
Publicado por: XÑA en 23 de Julio de 2008, 11:08:20 AM
Vereis, tengo un conjunto de grafiquitos dentro de una textura. Lo utilizo para hacer un GUI, y por tanto tengo las coordenadas de cada clip que luego utilizo para dibujar un rectángulo con los métodos de D3D, y así puedo tener un GUI propio.

Bien, el problema que tengo es que a veces al dibujarse me coge un pixel más del que toca. Entonces resolví el problema del ajuste sumando 0.5 y restando 0.5:

_TextureClip clip=texture->Clips[clipIndex];

u=(float)(clip.X+0.5f)/(float)texture->GetWidth();
v=(float)(clip.Y+0.5f)/(float)texture->GetHeight();
u2=(float)(clip.X2()-0.5f)/(float)texture->GetWidth();
v2=(float)(clip.Y2()-0.5f)/(float)texture->GetHeight();


Pero el problema que tengo ahora es que en algunos clips, este pixel que me sobraba me falta!

En realidad el problema está en que las coordenadas de textura no se adaptan a los pixels, pero la cuestión es que no sé cómo solucionar este problema.

¿Alguna idea?

Postdata:
Ya resto -0.5/viewport al dibujar el Quad en D3d.
Título: Ajuste de las coords de textura en DX
Publicado por: davidgf en 26 de Julio de 2008, 07:20:16 PM
Hola!

Si no me equivoco el problema recae en que las texturas son "infinitas", es decir, se repiten infinitamente. En el caso que tengas activado un filtro (anisotropico, linear, etc) usará los pixeles cercanos para interpolar. Si eso lo hace cogiendo el pixel 0,0 lo interpolará con los de al lado, que son los de la esquina contraria.

Por ello te recomiendo que desactives los filtros de textura i pruebes a ver que tal se ve así.

Saludos!

David
Título: Ajuste de las coords de textura en DX
Publicado por: Zaelsius en 26 de Julio de 2008, 11:21:36 PM
Prueba a usar el modo "clamp" para el mapeado de texturas

http://msdn.microsoft.com/en-us/library/aa911203.aspx

http://www.indiegamer.com/archives/t-1917.html

http://msdn.microsoft.com/en-us/library/bb219690.aspx
Título: Ajuste de las coords de textura en DX
Publicado por: XÑA en 28 de Julio de 2008, 08:11:54 AM
El clamp sólo funciona caundo se superan los límites de la textura y ese no es mi caso.

Lo cierto es que debe existir un problema de redondeo, porque sabeis que si queremos asignar una textura a toda la pantalla utilizaríamos las coords de textura: (0,0)-(1,1)

Sin embargo, matemáticamente, si lo hiciéramos con clips, sería:

(0,0)-(639/GetWidth(),479/GetHeight())

Porque el último pixel es el 639,479, no el 640,480.

Pero bueno, sí lo he resuelto quitando el filtro Lineal, por Point!!!  :D

Gracias
Título: Re: Ajuste de las coords de textura en DX
Publicado por: davidgf en 19 de Agosto de 2008, 03:03:31 PM
Hey! Perdonad que conteste ahora, pero po ahi he leido que algo similar sucede en OGL y proponen tralsadar todo 0.375

http://glprogramming.com/red/appendixg.html (http://glprogramming.com/red/appendixg.html)

Diría que va de lo mismo.

Xau!