Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: zupervaca en 21 de Enero de 2007, 12:36:14 AM

Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: zupervaca en 21 de Enero de 2007, 12:36:14 AM
Hola me he dado cuenta que d3d9 y ogl sucede algo extraño cuando pones el filtro linear a una textura.
Una imagen vale mas que mil palabras:
(http://img259.imageshack.us/img259/1633/faena9ff.th.png) (http://img259.imageshack.us/my.php?image=faena9ff.png)
Si os fijais detenidamente los bordes con el filtro point son perfectos, pero resulta que al poner el filtro linear el borde izquierdo amarillo coge un poco del color rojo del borde derecho y viceversa.
¿Alguien sabe solucionar esto?

PD: Es un ejemplo de codesampler, como a mi me pasaba en las rutinas que tenia lo descarge para salir de dudas, lo podeis ver en vivo aqui: http://www.codesampler.com/dx9src/dx9src_3.htm#dx9_texture_filtering
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: _Grey en 21 de Enero de 2007, 12:55:02 AM
El maximo de la textura, en la parte de abajo y la derecha, no deberia ser 1.0 sino 0.9999 o asi. No te sabria decir por que le pasa en un ejemplo y no en otro, pero si la textura se puede repetir (D3DTADDRESS_WR) la repeticion empieza en el segundo entero 0.0==1.0==2.0==3.0.

Hace mucho qu eno toco D3D... bueno y casi todo de 3D ... o ya puestos, codigo, que uno se hace viejo, pero tambien recuerdo que se puede variar el "centro del pixel de la textura" o algo asi, de todas formas ese problema se deberia solucionar cambiando los 1.0 por simplemente 0.9999.

Espero que sea de ayuda, saludos.
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: zupervaca en 21 de Enero de 2007, 01:11:45 AM
He hecho la prueba poniendo 0.9 y el borde izquierdo amarillo sigue teniendo un poco de rojo:
(http://img292.imageshack.us/img292/7526/dibujo4yd.th.png) (http://img292.imageshack.us/my.php?image=dibujo4yd.png)
Tambien he probado a empezar en 0.02 y se quita, pero pierdo un pixel de la textura, me parece que el problema es que para calcular el punto 0,0 de la textura tiene en cuenta los de su alrededor, en este caso seria la otra esquina de la textura. ¿Alguna idea mas?
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: _Grey en 21 de Enero de 2007, 08:28:29 AM
ups! Ahora que lo recuerdo, el ultimo pixel de cada linea que forma el triangulo no se pinta, con lo que no deberia haber problema con 1.0.. .sorry  :oops: ... o eso creo recordar...


Se me ocurre que podrias usar D3DTADDRESS_CLAMP en el SetTextureStageState(), asi, conservarias el color de "su" borde. Pero si tienes una "gran" textura con todas las demas dentro para minimizar los cambios de estado igual no te servira... :?

No se me ocurre mucho mas.. si alguien mas se anima...
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: zupervaca en 21 de Enero de 2007, 12:20:50 PM
CitarSe me ocurre que podrias usar D3DTADDRESS_CLAMP
Ahora si que ya esta solucionado, muchas gracias grey.
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: Ithaqua en 21 de Enero de 2007, 09:20:33 PM
Para OpenGL usa:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Requiere opengl 1.2, que ya es wraro wraro que no lo soporte alguien. En todo caso si no detectas ogl 1.2 usa:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
Título: Bordes raros en d3d9 y ogl (point y linear)
Publicado por: Pogacha en 22 de Enero de 2007, 11:14:47 AM
Y en Direct3d los pixeles se dibujan a partir de X.5 y si dibujas en X.0 dependiendo de los filtros extras(asynontropico, antializing) que tenga la placa se dibujara el pixel anterior.