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.