Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Color transparente

Iniciado por McBain, 13 de Junio de 2006, 01:40:29 PM

« anterior - próximo »

zupervaca

¿Te funciona? Es que a simple vista no se ven problemas, lo unico que en el "D3DXCreateTextureFromFileEx" en vez de poner "D3DUSAGE_RENDERTARGET" pon el valor "0".

Buscando algun ejemplo sobre la lectura de texturas he encontrado una pequeña joya que fijo que te ayuda: http://www.codigoverde.com/Space%20Invaders%206.htm, ademas me parece que esta web es de un usuario de stratos o por lo menos algunos de sus juegos estan en ella.

McBain

Ya me funciona, gracias a todos.

MA]Mestre

Cita de: "senior wapo"
b) Opengl fuerza todo a estar presente mediante fallback software si no fuese posible por hard. DirectX no obliga a nada ya que entiende que una implementación software podría ser poco util. Lo suyo es que la aplicación consulte y utilice solo las funciones implementadas por hard si requiere velocidad. (familia GetCaps en DX y GetInteger()+bases de datos basadas en vendor string en OpenGL).

No tenía noticias de que OpenGL de soporte a todo ( todo ? ) por fallback software. Tienes algun link de esto ? ( icono - curiosidad )

Cita de: "senior wapo"
c) Soportase OpenGL o no, era la época negra de la programación OpenGL en windows (y si me apuras de DX también, pero de OpenGL mejor ni hablar). Dejémoslo correr :D

No voy a entrar en los problemas que pudiera haber con Win o drivers. Pero vamos... que un GRUPO de PROFESIONALES que desarrollan hardware, ofrezcan soporte para alpha blending que es más complicado de desarrollar y no para alpha test que es más simple...
es como si alguien te dice que sabe hacer carros pero no ruedas... ...i si le sumas lo poco sobrados q por la época ivan de hard para hacer blend... pffff

Cita de: "senior wapo"
d) Por software, alpha test es potencialmente más rápido al ser simplemente una comparación. Blending implica hacer una mezcla de color (por ejemplo una media ponderada mediante alpha de la textura).

 alpha test:  if (framebuffer[x,y].alpha > texel.alpha) then framebuffer[x,y] = texel
 blending:  framebuffer[x,y].pixel = framebuffer[x,y].pixel * (1-texel.alpha) + texel.pixel * texel.alpha

ohhhh :wink:  permiteme hacer un par de matices y un añadido.

Matices

Por software y por hardware, alpha test es realmente más rapido.

El alphablending dispone de numerosas combinaciones de mezcla y algunas un tanto complejas. O lo que es lo mismo, muchisimo más tiempo de proceso.

Añadido
Te ha faltado agregar el pipeline donde se encuentran los dos procesos.

... alpha test --> stencil test --> depth buffer test --> blending ...

alguien se ha preguntado alguna vez pq con un blending no aditivo debe realizar una ordenación de los elementos de back to top ?

Podemos estar deacuerdo en definir el que alpha test realiza un test para eliminar un pixel ? ( lo que pedia MacBain )

Podemos estar deacuerto en definir al Blending ( no blending test xD ) como mezclar pixeles ?

Como vendemos a alguien quiere hacer un universo con 300 rectanglos huecos, que use blending, .( tengo problemas raros !!! ) ...que trace la distancia de cada rectangulo para después ordenarlo... y que encima se compre una tarjeta de 140€... pq cuando unos pocos de rectangulos cubren toda la ventana los frames se le tiran abajo... ...pero claro, saldrá alguien y le dirá... Frustrum Culling!!! o culquier otra técnica del estilo... ...lo implementará y seguirá exactamente igual... ... pq usando esa o otra técnica a el trozo de pipeline que he puesto le llegarán exactamente la misma cantidad de putos pixeles...

MA]Mestre

Cita de: "zupervaca"Veamos ¿por que tengo que defender lo que dice la documentacion de direct3d?

No hombre no, no debes defender la documentación del direct3D. Debes defender tus palabras. Por lo pronto, recomendar el alphablending para hacer un colorkey.

Algunas citas.

"...ademas este es el sistema de toda la vida para crear transparencias teniendo un canal alfa. "  ( refiriendote al alpha blending )"

"...ademas es como se ha hecho toda la vida, espero que te haya quedado claro y si no busca en google como hacer mascara de color con estas dos instrucciones en google." ( refiriendote a usar máscaras )

"Ni tu ni nadie por la sencilla razon de que el alpha testing descarta pixels con el problema de que no suaviza los bordes como hace el alpha blending"

Este de que el blending suaviza bordes es brutal !!! más caracteristicas para el blending !!!! ole ole !!! a tomaaaaaar pol cuuuuulo el Full-Screen Antialiasiingggg  (entonación cálico )

Ponte una imagen cuadrada blanca (255,255,255), pon un rombo negro(0,0,0) dentro. Los pixeles blancos pon el alpha a 0, y los negros a 1. y ahora quiero q desaparezcan los blacos o negros con blending... y que se suavicen el brodes !!!!

La comunidad del alpha test te agradece que reconozcas que sirve para descartar pixels ( por alpha ).

MA]Mestre

[quote="[EX3]"Y digo yo, no es un poco estupida toda esta cuestion que
estas formando con el AlphaTest?[/quote]

Si en algo que conozco veo que sueltan una de estas, que debo pensar de lo que pone la gente sobre temas que desconozco ? por eso para mi es importante.

[quote="[EX3]No has pensado que luego McBain querra aplicar AlphaBlending? Para que vas a implementar AlphaTest y Blending cuando con Blending cubres las dos necesidades?[/quote]

Que cada uno emplee lo que quiera, pero que sepa que esta haciendo exactamente en cada momento. Para lo demás, me remito a el universo de los 300 rectangulos huecos.

[quote="[EX3]Ahi tienes la 'logica y razon' de por que se usa y recomienda Blending y no AlphaTest en la mayoria de tutoriales de toda la red.[/quote]

Aquí entramos en lo del criterio propio, donde la mayoria, no es sinónimo de nada. ( Sin ser comparable a lo que estamos hablando, Hitler llego al poder através de las elecciones. )

P.D: Por cierto, googleando un poco me encotre con esto...  

http://www.stratos-ad.com/forums2/viewtopic.php?p=18410&sid=605c73a582a25e25cdaf0b6d508846b0

curioso no ?

MA]Mestre

Jare
CitarPuedes creerme, yo sí he tenido en mis manos las especificaciones de la Virge bit a bit y registro a registro. Y sobre todo, he trabajado con ella.

Te repito que sin dudar de tu palabra, me cuesta creerlo, primero se anda después se corre, primero fue el alphatest, después el alphablend. Lástima que no tengamos las Specs. No estaría soportado por hard y tubieran el problema X con ella ?

Jare
CitarAlpha Test en general es más rápido de ejecutar que un blend, pero alpha test en software será más lento que blend por hardware. :P

Claro, pero los dos en las mismas condiciones (soft/hard) no hay color.

Jare
CitarComo dice zuper, el test genera bordes "duros" que pueden quedar muy feos

Claro coño, pero con el blending se puede llegar al mismo punto, no es esa la solucion, no crees ?

Citar
pero el blending tiene su propio conjunto de problemas: ordenación y multipass son los más clásicos.

Y alguno más... entonces mejor evitarlo cuando no sea necesario ? :P

Citar
El tercer problema clásico (y el que más quebraderos de cabeza me dio en su momento) es el hecho de que con blending, los texel transparentes también escriben en el ZBuffer.

Por arriba he puesto el pipeline. Los texels trasparentes se escribian pq no eran transparentes.

Citar
Hoy en día lo del ZBuffer se suele resolver activando blending Y testing a la vez, aunque suelen quedar unas babas un poco feas alrededor del gráfico.

Y que hacemos para suavizar las babas... otro blending ? :P o la tecnica q corresponda ?

P.D: Sorry por el flood de msgs

zupervaca

CitarEste de que el blending suaviza bordes es brutal !!! más caracteristicas para el blending !!!! ole ole !!! a tomaaaaaar pol cuuuuulo el Full-Screen Antialiasiingggg (entonación cálico )
Esto demuestra que no sabes de lo que hablas.

ethernet

Dejadlo, por vuestro bien.

senior wapo

No la lieis.

Con texels alpha soportas bordes suavizados (antialias) porque la transparencia tiene 256 grados en lugar de 2 (si/no) como pasaría con colorkey puro o alpha test. Con bordes nos referimos al contenido de la imagen de textura, no al borde del poligono, que es donde si que necesitas antialias de escena. Un valor alpha se puede considerar como el % del area del pixel que se ve afectada por la parte RGB, y por tanto el otro % de superficie hasta sumar 100% estaría mostrando el color RGB del fondo. Como el aspecto dentado se produce cuando pintamos un pixel que matematicamente no cubririamos realmente por entero, podemos usar alpha para simular un pintado parcial (subpixel). Mismamento, usando como valor alpha el error acumulado (o su inverso) de ese pixel en el algoritmo bresenham que pinta el borde. En el fondo no es más que una cuestión semántica.



<inciso>
Aun asi, y poniendonos pedantes por aquello de rizar el rizo, teóricamente puedes suavizar bordes poligonales aprovechando detección de bordes de silueta (como los usados para shadow volumes)  y superponiendo a cada borde de poligono que contribuye a silueta un quad difuminado de ancho 2-3 pixeles paralelo a la pantalla y a modo de línea trazando el borde. Vamos, usar poligonos con degradados alpha para pintar wireframes sobre la silueta del modelo como si fuese un modelo de Geometry Wars.

Ejemplo OpenGL (formato MacOSX creo) de lineas con antialias (usando una textura de degradado alpha para los quads que trazan las lineas):
http://homepage.mac.com/arekkusu/SW/shootthings.html y pulsad el link glAARG</fin de inciso>

La especificación OpenGL viene en el libro rojo en la web de www.opengl.org. Eso si, en inglés.

Lex


[EX3]

Cita de: "MAMestre"]
Cita de: "[EX3"]No has pensado que luego McBain querra aplicar AlphaBlending? Para que vas a implementar AlphaTest y Blending cuando con Blending cubres las dos necesidades?
Que cada uno emplee lo que quiera, pero que sepa que esta haciendo exactamente en cada momento. Para lo demás, me remito a el universo de los 300 rectangulos huecos.
Sigo viendo una soberana estupidez usar dos metodos cuando uno te cubre ambas necesidades: colorkey y alphablending.

Cita de: "MAMestre"]Aquí entramos en lo del criterio propio, donde la mayoria, no es sinónimo de nada. ( Sin ser comparable a lo que estamos hablando, Hitler llego al poder através de las elecciones. )
Chico, esto y nada es lo mismo. Hacer comparaciones como esa que acabas de hacer son simples signos de falta de recursos para seguir una discursion.

Cita de: "MAMestre"]P.D: Por cierto, googleando un poco me encotre con esto...  

http://www.stratos-ad.com/forums2/viewtopic.php?p=18410&sid=605c73a582a25e25cdaf0b6d508846b0

curioso no ?
Que quieres que te diga, ahi solo veo dos cosas: lo mal que escribia en los foros antaño en comparacion de ahora :lol: y mis escasos conocimientos de Direct3D8 hace 3 años, camino de 4 ya, cuando aun estaba programando integramente sobre DirectDraw7 donde la filosofia de programacion era totalmente distinta a Direct3D8 radicalmente (y hablo de DDraw7 y no sobre lo poco que toque D3D7 que aun asi variaba ligeramente) por que por lo demas seguimos en lo mismo, acabe usando el metodo de blending en la dx_lib32 y no el alphatest:
D3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
D3DDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE

Te vuelvo a deicr, es tonteria usar dos metodos cuando uno te sirve para todo y aunque tu no lo compartas el resto del mundo si ;)

Salu2...

P.D.: El AlphaTest lo tuve una temporada usando en algunas de las primeras versiones de la dx_lib32, pero visto que usarla o no, no afectaba en nada al resultado final, lo acabe retirando del codigo dejando al Blending a secas.
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Jare

Cita de: "MAMestre"]Te repito que sin dudar de tu palabra, me cuesta creerlo, primero se anda después se corre, primero fue el alphatest, después el alphablend. Lástima que no tengamos las Specs.
La memoria me falla respecto a algunas de las lindezas de la S3 Virge. En cualquier caso, solo la mencioné como ejemplo de que las cosas a veces no son tan sencillas y ortogonales como nos gustaría o nos parecería lógico. La Virge a día de hoy es irrelevante.

Respecto a la discusión, lo mejor es conocer ambas técnicas, saber cuándo usar una u otra, los problemas que puede dar cada una en diferentes situaciones, y las posibles soluciones o hacks disponibles. Sería más util para todos si cada uno dedica esfuerzos a aportar información en lugar de desacreditar la que aportan los demás. En esa línea, otro dato interesante: en la mayoría de las tarjetas anteriores a las ATI 1x00 y NVidia 7x00, el alphatesting no recibe los beneficios del Full Screen Antialiasing. Si quereis ver lo que sucede, probad el King Kong de Ubisoft, que usa alphatesting para las grandes masas de vegetación, y comparad los resultados con FSAA en una 6600 y una 7800... no hay color. En la 6600 el baile de pixeles es un horror. :P

JMAA

Es como decir sobre los gametos gemetiles... (ya os pasaré el video por Off-Topic)
http://flavors.me/JMAA - Página Personal

Ruben

Cita de: "JtR666"Es como decir sobre los gametos gemetiles... (ya os pasaré el video por Off-Topic)

Leyendo tus comentarios he intentado ignorarlos porque nunca me aportan nada positivo, pero desde hace algun tiempo me viene rondando una pregunta cada vez que finalizo de leer una de tus perlas: ¿de que cueva has salido?  ¿no estabas mas agusto en ella?

Zaelsius

Cita de: "Ruben"¿de que cueva has salido?  ¿no estabas mas agusto en ella?

Ruben, lo pone bien claro bajo su avatar: "En el rincón más profundo de Donosti"

PD: Perdón por sumarme al offtopic, pero visto que el hilo ya hace días que está perdido..  :D






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.