Logo

¡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.
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.