Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





D3dxsprite Y Billboards...

Iniciado por boubou, 22 de Febrero de 2004, 08:05:33 PM

« anterior - próximo »

boubou

 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 ;)
onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

boubou

onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

Haddd

 Mira el ejemplo del SDK titulado PointSprites.  :D  

boubou

onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

boubou

 ya lo tengo solucionado, el problema es que me hacia un sprite muy grande y tenia que escalarlo.
onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

boubou

 okis, por cierto, como puedo aplicarles alphablending?
el problema es que no se me ve translucido del todo.
onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

boubou

onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

Thenend

 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.

boubou

onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

boubou

 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.
onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

Thenend

 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:



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:



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.

boubou

 si, el problema es que por ejemplo, la primera imagen que has puesto, los bordes , que tendrian que ser translucidos, se ven en negro.
onstruo Bou... Ha vuelto Mwhahahahahahahahahahahahahah!

Es la unica esperanza de los trolls tras el envio al "infienno
" de WhiteBlaizer y X-Alien

Thenend

 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






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.