Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: boubou en 22 de Febrero de 2004, 08:05:33 PM

Título: D3dxsprite Y Billboards...
Publicado por: boubou en 22 de Febrero de 2004, 08:05:33 PM
 como puedo hacer billboards con el d3dxsprite??? se que se puede, pero por mas que lo intento no puedo.

enga a ver si me ayudais ;)
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 22 de Febrero de 2004, 09:25:44 PM
 hello???
Título: D3dxsprite Y Billboards...
Publicado por: Haddd en 22 de Febrero de 2004, 10:53:08 PM
 Mira el ejemplo del SDK titulado PointSprites.  :D  
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 22 de Febrero de 2004, 10:56:04 PM
 pero ese usa el D3DXSPRITE???
Título: D3dxsprite Y Billboards...
Publicado por: BeRSeRKeR en 22 de Febrero de 2004, 11:24:51 PM
 Yo no he utilizado la interface ID3DXSprite en mi vida pero según la ayuda del SDK de las DirectX (que viene muy bien para consultar estas cosas), cuando vayas a renderizar el sprite, en la llamada a ID3DXSprite::Begin debes especificar el flag D3DXSPRITE_BILLBOARD. Hecho esto, antes de llamar al método ID3DXSprite::Draw, y siguiendo lo que dice la ayuda, debes llamar al método ID3DXSprite::SetWorldViewLH o ID3DXSprite::SetWorldViewRH, dependiendo del sistema de coordenadas de utilices. A través de ese método debes especificar la matriz de mundo y de vista para que la interface ID3DXSprite sepa cómo crear el billboarding.

Saludos.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 23 de Febrero de 2004, 08:58:37 AM
 ya lo tengo solucionado, el problema es que me hacia un sprite muy grande y tenia que escalarlo.
Título: D3dxsprite Y Billboards...
Publicado por: BeRSeRKeR en 23 de Febrero de 2004, 04:15:22 PM
 Pero entonces, ¿el problema era que no veías el sprite?, ¿que el sprite se veía pero no encaraba constantemente la cámara?, ¿o qué era?...

Tal vez deberías describir tus problemas de una forma más desarrollada y clara y no algo tan genérico como " como puedo hacer billboards con el d3dxsprite???". Así podríamos darte una respuesta más concreta.

Saludos.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 23 de Febrero de 2004, 05:25:32 PM
 okis, por cierto, como puedo aplicarles alphablending?
el problema es que no se me ve translucido del todo.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 23 de Febrero de 2004, 07:49:09 PM
 hello??
Título: D3dxsprite Y Billboards...
Publicado por: Thenend en 23 de Febrero de 2004, 08:44:51 PM
 Pues al empezar a dibujar los sprites tienes que activar el flag que dice que vas a usar el canal alpha:

g_pSprite->Begin( D3DXSPRITE_ALPHABLEND );

Y después tendrás que modular este canal con el parámetro Color que tiene el método Draw:

g_pSprite->Draw(   pTexLucecita,
                             NULL, &D3DXVECTOR3( 64.0f, 64.0f, 0.0f ),
                             &D3DXVECTOR3( 100.0f, 100.0f, 0.0f ),
                             0xFFFFFFFF );


Con esto verías el sprite con su alfa normal, si algunos pixels de la imagen tienen canal alfa menor de FF, solamente esos se veran traslúcidos. El valor alpha del pixel se puede modificar con un buen editor de gráficos.

En cambio si lo modulamos:

g_pSprite->Draw(   pTexLucecita,
                             NULL, &D3DXVECTOR3( 64.0f, 64.0f, 0.0f ),
                             &D3DXVECTOR3( 100.0f, 100.0f, 0.0f ),
                             0x55FFFFFF );



Todos los pixels se verán traslúcidos, incluso los que tienen el alfa al máximo (FF).

Si le pusieramos el alpha a 00 no se vería en absoluto

g_pSprite->Draw(   pTexLucecita,
                             NULL, &D3DXVECTOR3( 64.0f, 64.0f, 0.0f ),
                             &D3DXVECTOR3( 100.0f, 100.0f, 0.0f ),
                             0x00FFFFFF );


Espero que fuera eso lo que preguntabas.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 23 de Febrero de 2004, 09:51:59 PM
 asias jiji.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 23 de Febrero de 2004, 10:12:37 PM
 pos no, lo que yo quiero es aplicarle un alphablend con un setrenderstate para que los tonos de grises/negros se transparenten, pero por mas que lo intento, nada oiga.

lo que quiero conseguir es el alpha que se hace para los efectos de particulas.
Título: D3dxsprite Y Billboards...
Publicado por: Thenend en 23 de Febrero de 2004, 11:38:37 PM
 No se si te entiendo muy bien.

Lo que se suele hacer en el típico ejemplo de partículas (las chispas y lucecillas de siempre) es tener una imagen de este estilo:

(http://www.codigoverde.com/otros/postear/Star.png)

Y entonces, jugando con lo de modular los colores se le pone el tono que quieras (rosa barbie, verde vomito, etc)

Otra forma es usar una imagen con pixels que tienen alfas distintos. Por ejemplo, en esta imagen:

(http://www.codigoverde.com/otros/postear/LaserMalos.png)

Los pixels de los bordes del "laser" (hacer el gesto de las comillas con las manos) tienen un alpha menor que los del centro y eso hace que el color del fondo influya más a los bordes que al centro.
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 24 de Febrero de 2004, 04:05:23 PM
 si, el problema es que por ejemplo, la primera imagen que has puesto, los bordes , que tendrian que ser translucidos, se ven en negro.
Título: D3dxsprite Y Billboards...
Publicado por: Thenend en 24 de Febrero de 2004, 05:32:57 PM
 Pues parece un problema del factor de blending. Prueba a poner esto antes de dibujar el sprite:

g_pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
g_pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );


Por defecto, DirectX tiene un factor 1 en la fuente (SRC) y un factor 0 en el destino (DEST) por lo que solo se tiene en cuenta los colores de la fuente; no se justo que factores pone la clase SPRITE cuando le dices que haga blending pero sera algo asi como D3DBLEND_DESTALPHA y D3DBLEND_SRCALPHA.

Si los dos tienen factor 1, los valores de los pixels de fuente y de destino se suman (la función de sumar esta por defecto pero se puede cambiar con el estado D3DRS_BLENDOP)

Al sumarse los colores algunos quedan saturados, esto puede quedar bien para lucecillas y eso, pero si solo necesitas que se vea transparente prueba esto:

g_pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR );
g_pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR );


Esto crea un efecto menos brillante y mas "fantasmagórico".

Prueba a poner distintos valores para la fuente y el destino hasta que encuentres el que mas te gusta pero yo creo que el primero queda bien con las partículas "chispita" típicas.

A ver si es eso lo que te falla.

EDIT: lo he mirado y D3DXSPRITE pone D3DBLEND_SRCALPHA y D3DBLEND_INVSRCALPHA
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 24 de Febrero de 2004, 08:05:25 PM
 gracias, a ver si me rula.

biezzzz!!!
Título: D3dxsprite Y Billboards...
Publicado por: boubou en 24 de Febrero de 2004, 09:06:20 PM
 yata!!!el problema era que habia activado el alpha blending de nuevo con el set render state  (nooo)