Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Billboards

Iniciado por Degiik, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Degiik

                                CordayUK
---------------------------------------------

para hacer los billboards...
el codigo que prometi  

///

te copio el codigo que utilizo yo y mas abajo te lo explico un poco...


matrix matTranspose, matBBRot, matView;

matView = pCamera->GetViewMatrix ();

MatrixTranspose (&matView, &matTranspose); //in,out
MatrixIdentity (&matBBRot); //in

matBBRot._11 = matTranspose._11;
matBBRot._12 = matTranspose._12;
matBBRot._13 = matTranspose._13;
matBBRot._21 = matTranspose._21;
matBBRot._22 = matTranspose._22;
matBBRot._23 = matTranspose._23;
matBBRot._31 = matTranspose._31;
matBBRot._32 = matTranspose._32;
matBBRot._33 = matTranspose._33;

m_matWld = m_matRot * matBBRot * m_matLoc;


////

1. obtienes matview es la matriz-vista de tu camara, es decir, la que pasas al SetTransform(D3DTS_VIEW,..) en directx.

2. calculas la transpuesta de esta matriz (D3DX tiene funciones ya hechas para ello)

3. te creas una nueva matriz (por defecto yo siempre las inicializo a identidad, pero aqui no haria falta)
y fijas las 3 primeras filas y columnas igual que la matriz transpuesa que has calculado antes.
(si no habias inicializado la matriz a identidad, acuerdate de la ultima fila ha de ser 0,0,0,1)

4. la matriz final del billboard es la matriz de rotacion local del billboard * la matriz que acabamos de calcular
* la matriz de posicion local del billboard. (por defecto la matriz de rotacion del billboard no la usas porque
para que narices quieres rotar el billboard mas de la cuenta, no? pero para algunos efectos puedes utilizarla.
Lo normal es dejar esta matriz de rotacion local a 0x, 0y, 0z.

////

otra forma mucho mas sencilla de hacer el billboard es

1. coger la matriz-mundo de tu camara. (es la que usas para una vez invertida obtener la matriz vista)
2. cambiarle los tres primeros valores de la ultima fila a donde quieras colocar el billboard en el mundo.

y ya esta, asi de facil. esta nueva matriz es la matriz que tienes que aplicar a tu billboard.


si ves que no te funciona, un fallo tipico es mira a ver como tienes puesto el culling
(ya que puede ser que el billboard este mirando justo al reves a la camara y por eso no se dibuje)
asi que desactivalo y haz pruebas a ver.

salu2

---------------------------------------------


Berserker
---------------------------------------------
Hmm lo del ángulo...¿te refieres a que la partícula encare la cámara?...si es así, entonces, el código que te ha puesto Corday es lo que necesitas.

Saludos
---------------------------------------------



"m_matWld = m_matRot * matBBRot * m_matLoc;"

alquien puede especificarme el sentido de las matrices m_matRot m_matLoc m_matWld. En fin el punto 4 no lo entiendo...
¿alguien me puede ayudar?

Gracias.

[ Este Mensaje fue editado por: Degiik el 2002-09-21 14:34 ]                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

BeRSeRKeR

                                otra forma (creo que es la forma fácil de la que hablaba CordayUK)

D3DXMATRIX viewMtx, worldMtx;
g_pD3DDev->GetTransform(D3DTS_VIEW, &viewMtx);
D3DXMatrixInverse(&worldMtx, NULL, &viewMtx);
worldMtx._41 = billboardPos.x;
worldMtx._42 = billboardPos.y;
worldMtx._43 = billboardPos.z;
g_pD3DDev->SetTransform(D3DTS_WORLD, &worldMtx);
RenderBillboard();

Si utilizas un pure device, entonces no es recomendable el método GetTransform ya que lo más seguro es que no te devuelva lo que esperas. Así que te aconsejo que mantengas tus matrices de vista y de proyección (por ejemplo) por tí mismo...

Saludos
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

CordayUK

                               
m_matWld = m_matRot * matBBRot * m_matLoc;


m_matWld -> matriz final de transformacion del objeto. es la que tenemos que aplicar al billboard.

m_matRot -> es la matriz de rotacion del billboard (no hace falta que la pongas, si quieres ignorala)

estas matrices pueden ser D3DXMatrix o tu propio tipo matriz.

no se si me explicado bien... :/ si eso dime a ver que parte no pillas...

salu2
m_matBBRot -> es la matriz que "corrige" la rotacion del billboard.

m_matLoc -> es la matriz que coloca el billboard en el mundo

es decir, la matriz final del billboard se compone de dos cosas, la rotacion y la localizacion. La localizacion dice donde esta el billboard, y la rotacion hacia donde mira.

                               






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.