Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Este Tuto Está Mal O No Lo Entiendo

Iniciado por tywok, 28 de Diciembre de 2003, 01:18:38 AM

« anterior - próximo »

tywok

 Hola! Estoy leyendo un tutorial sobre el formato md2 para intentar implementarlo en lo q se podria llamar mi motor(tengo solo 2 clases hechasxDDD) pero bueno, la duda viene sobre el propio codigo que hay en el tutorial...

A ver.. el tutorial es el de xbdev.net que está aqui.



struct stVerts
{
     byte vertex[3]; // an index reference into the location of our vertexs
     byte lightNormalIndex; // in index into which tex coords to use.
};

struct stAliasFrame
{
    float scale[3];
    float translate[3];
    char name[16];
   stVerts aliasVerts[1];
};


Vale, mi problema esta en aliasVerts, q se supone es un array de punteros para 1 solo vertice, no?


unsigned char largebuffer[10000];
stAliasFrame* pTempFrame = (stAliasFrame*) largebuffer;


bueno, hasta aqui todo normal... ahora viene lo raro


for(int i=0; i< Md2Header.numVertices; i++)
     {
           pFrames[0].pVerts[i].vertex[0] = pTempFrame->aliasVerts[i].vertex[0] * pTempFrame->scale[0] + pTempFrame->translate[0]; // x
           pFrames[0].pVerts[i].vertex[1] = pTempFrame->aliasVerts[i].vertex[2] * pTempFrame->scale[2] + pTempFrame->translate[2]; // y
           pFrames[0].pVerts[i].vertex[2] = -1 * (pTempFrame->aliasVerts[i].vertex[1] * pTempFrame->scale[1] + pTempFrame->translate[1]); // z
     }
}


pues entonces, aqui el tio se refiere a aliasVerts como pTempFrame->aliasVerts.vertex[0] pero.... no se supone q era un array de un elemento??? (nooo)

nose, no le veo la logica, puede q este mal. no he intentado compilarlo, pero me parece raro q publiquen un tutorial tan grande con codigo malo. si me podeis decir si esta bien o mal y porque, os lo agradeceria muxo

un saludo
tywok
Felices Fiestas!





tywok

 ey, en serio, alguien le ve la logica o me he explicado mal??
ayudarme, plis

Minos

 Bueno, me he estado mirando el tuto de MD2 (yo mire el de gametutorials que es igual) y parece que como el logicamente la estructura no sabe cuantos vertices va a tener el modelo pues pone 1 para crear como un puntero (o algo asi). Si te fijas como carga los frames:


for (int i=0; i < m_Header.numFrames; i++)
{
 // Assign our alias frame to our buffer memory
 tMd2AliasFrame *pFrame = (tMd2AliasFrame *) buffer;

 // Allocate the memory for the first frame of animation's vertices
 m_pFrames[i].pVertices = new tMd2Triangle [m_Header.numVertices];

 // Read in the first frame of animation
 fread(pFrame, 1, m_Header.frameSize, m_FilePointer);

 // Copy the name of the animation to our frames array
 strcpy(m_pFrames[i].strName, pFrame->name);
 
 // Store off a vertex array pointer to cut down large lines of code
 tMd2Triangle *pVertices = m_pFrames[i].pVertices;

 // Go through all of the number of vertices and assign the scale and translations.
 // Store the vertices in our current frame's vertex list array, while swapping Y and Z.
 // Notice we also negate the Z axis as well to make the swap correctly.
 for (int j=0; j < m_Header.numVertices; j++)
 {
  pVertices[j].vertex[0] = pFrame->aliasVertices[j].vertex[0] * pFrame->scale[0] + pFrame->translate[0];
  pVertices[j].vertex[2] = -1 * (pFrame->aliasVertices[j].vertex[1] * pFrame->scale[1] + pFrame->translate[1]);
  pVertices[j].vertex[1] = pFrame->aliasVertices[j].vertex[2] * pFrame->scale[2] + pFrame->translate[2];
 }
}


se ve que lee los 3 primeros datos del frame (    float scale[3];   float translate[3];   char name[16]; ) y al llegar a  "tMd2AliasTriangle aliasVertices[1];" la estructura no sabe cuantos vertices hay, pero estos x vertices estan almacenados en el archivo, por lo cual procede a leer uno por uno.
Esto es mas o menos como lo veo yo, desde luego el codigo de gametutorials funciona.

espero haberte ayudado en algo.saludos

tywok

 si, es lo q me parecia, aunque lo veia como un poco demasiado raro.. jeje
muchas gracias!;)






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.