Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Transformando Vértices

Iniciado por AgeR, 01 de Marzo de 2005, 08:49:57 PM

« anterior - próximo »

AgeR

 A ver si me explico.
Estoy haciendo un "Tile Manager", como uso varias texturas, tengo una lista (stl) de vértices para cada textura.

Bien, cada tile tiene posicion, rotacion y escala.
Quiero pasar a la lista de vértices el vértice ya transformado.
Para ello hago :

TILE_VERTICE v;
for (int i = 0; i < 6; i++)
{
 v = m_vVertices2[i];
 m_vVerticesTmp[i].x = (v.x * matriz._11) + (v.y * matriz._12) + (v.z * matriz._13) + matriz._14;
 m_vVerticesTmp[i].y = (v.x * matriz._21) + (v.y * matriz._22) + (v.z * matriz._23) + matriz._24;
 m_vVerticesTmp[i].z = (v.x * matriz._31) + (v.y * matriz._32) + (v.z * matriz._33) + matriz._34;
 m_vVerticesTmp[i].u = m_vVertices2[i].u;
 m_vVerticesTmp[i].v = m_vVertices2[i].v;
}


Cada tile tiene 6 vértices, y después de convertirlos quedan en m_vVerticesTmp.
De aquí hago los push_back correspondientes para ir metiéndolos los 6 en la lista.

Con esto, a la hora de renderizarlos debería bastar en teoría usar para matriz de mundo la identidad, pero falla algo y no sé que puede ser (apuesto a que alguna burrada)  (nooo)

Alguna idea?  :(  

BeRSeRKeR

 No sé qué tipo de matrices utilizas pero si son las de Direct3D, entonces lo estas haciendo al revés, sería:

m_vVerticesTmp.x = (v.x * matriz._11) + (v.y * matriz._21) + (v.z * matriz._31) + matriz._41;
m_vVerticesTmp.y = (v.x * matriz._12) + (v.y * matriz._22) + (v.z * matriz._32) + matriz._42;
m_vVerticesTmp.z = (v.x * matriz._13) + (v.y * matriz._23) + (v.z * matriz._33) + matriz._43;

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

AgeR

 Sí, son las de Direct3D.  (nooo)
Lo he cambiado y sigue sin verse  :(

La matriz contiene todas las transformaciones que se han de aplicar al vértice (es el resultado de rotar, escalar y trasladar), y la matriz resultante es correcta, ya que uso las operaciones de D3DXMatrix* para obtenerla.

Alguna idea más? Esto de no haber usado más a pelo las matrices se paga caro  (nooo)


Haddd

 ¿pero te tiene que devolver el vértice en 3D o ya proyectado en 2D?


AgeR

 No, no, ha de devolverlo en 3D.
Los tiles no son más que polígonos a ras de suelo XD
Una vez tengo las listas hechas, las renderizo una a una. En teoría, porque aún no sé que pasa  :huh:  

Haddd

 ¿y que FVF utilizas para renderizar ?

AgeR

 const DWORD TILE_D3DFVF_VERTEX = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);
const DWORD TILE_D3DFVF_VERTEX_NOLUZ = (D3DFVF_XYZ|D3DFVF_TEX1);

Dependiendo de si quiero iluminación o no para el tile.
De ninguna de las dos formas se renderizan... En cambio, están bien transformados (comprobado, he estado logeando un rato a ver)...
Alguna estupidez estoy cometiendo, fijo.






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.