A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Sex Dez 04, 2020 11:54 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 3 mensagens ] 
Autor Mensagem
 Título: código da extensão do 3D max
MensagemEnviado: Sáb Set 04, 2010 4:40 pm 
Offline
Membro intermediário
Avatar do usuário

Registrado em: Sáb Jan 07, 2006 10:40 pm
Mensagens: 96
Localização: Porto Velho (RO)
Olá pessoal.

Dei uma olhada no forum, mas não achei nada a respeito, portanto, eis a minha necessidade:

Estou criando um motor com OpenGL, e para os modelos, eu crio ele pelo 3D Max, mas que ver-los sendo abertos no meu programa em OpenGL+ C++. Sei que em algum lugar existe algo como uma espécie de dicionário de como são armazenados os dados do 3Dmax. E eu gostaria de saber se alguem tem esse conhecimento ou por onde posso procurar.
Mas desde então, obrigado pela anteção.

_________________
Autobot´s, Transformem!!!


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Dom Set 05, 2010 12:29 am 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
http://www.wotsit.org/ - Este site contem varias estruturas de modelos 3d.
http://www.spacesimulator.net/wiki/inde ... 3ds_Loader - Estrutura de um loader para formato 3ds.

Estrutura de um loader e drawer para modelos 3ds.

Código:
//Basic Classes:
//Required for representing the loaded model
class vertex{
public:
   float x,y,z;
};
//MapCoord - for storing texture mapping coords
class mapcoord{
public:
   float u,v;
};

//The three ints for the polygon
//represent the no.s(or rank) of it's 3 vertices
class polygon{
public:
   int a,b,c;
};

class object{
public:
   char name[20];
   int numVerts,numPolys;
   vertex v[3000];
   polygon p[3000];
   mapcoord m[3000];
};



//-----------------------------------------------------------------------------
// Name: Load3dsObject (object *, char *)
// Desc: Loads a 3ds object given a filename
//-----------------------------------------------------------------------------

void Load3dsObject (object *obj, char *filename)
{
   FILE *file;         //Our file pointer

   char temp;         //Temporary char for reading name of object
   short chunkID;      //Stores ID of current chunk.
   int chunkLength;

   short useless;
   
   //Open our file for reading(r) and in binary mode(b)- "rb"
   file=fopen (filename, "rb");

   int i;

   //While current position is lesser than the total length
   while (ftell(file) < filelength (fileno (file))) 
   {
      fread (&chunkID, 2, 1, file);
      fread (&chunkLength, 4, 1,file);

      switch (chunkID)
        {
         case 0x4d4d:      //Skip these chunks
            break;   
         case 0x3d3d:
            break;
         
         case 0x4000:      //Chunk containing name
            for(i=0;i<20;i++)
            {
               fread (&temp, 1, 1, file);
                    obj->name[i]=temp;
               if(temp == '\0')break;
                }
            break;

         case 0x3f80:      //Skip again
            break;
         case 0x4100:
            break;
   
         case 0x4110:      //Chunk with num of vertices
                        //followed by their coordinates
            fread (&obj->numVerts, sizeof (unsigned short), 1, file);
            for (i=0; i<obj->numVerts; i++)
                {
               fread (&obj->v[i].x, sizeof(float), 1, file);
            
                    fread (&obj->v[i].y, sizeof(float), 1, file);
               
               fread (&obj->v[i].z, sizeof(float), 1, file);
            
            }
            break;

         case 0x4120:       //Chunk with numPolys and
                         //the indices
            fread (&obj->numPolys, sizeof (unsigned short), 1, file);
                for (i=0; i<obj->numPolys; i++)
                {
               fread (&obj->p[i].a, sizeof (unsigned short), 1, file);
            
               fread (&obj->p[i].b, sizeof (unsigned short), 1, file);
            
               fread (&obj->p[i].c, sizeof (unsigned short), 1, file);
               
               fread (&useless, sizeof (unsigned short), 1, file);
               
            }
            break;

      
         case 0x4140:      //Chunk with texture coords
            fread (&useless, sizeof (unsigned short), 1, file);
            for (i=0; i<obj->numVerts; i++)
            {
               fread (&obj->m[i].u, sizeof (float), 1, file);
            
                    fread (&obj->m[i].v, sizeof (float), 1, file);
            }
                break;

         default:
             fseek(file,chunkLength-6, SEEK_CUR);
        }
   }
   fclose (file);      
}



//-----------------------------------------------------------------------------
// Name: DrawObject(object *obj)
// Desc: Draws our loaded 3ds object
//-----------------------------------------------------------------------------

void DrawObject(object *obj)
{
   glBegin(GL_TRIANGLES);
    for (int i=0;i<obj->numPolys;i++)
    {
      glTexCoord2f( obj->m[ obj->p[i].a ].u,
                      obj->m[ obj->p[i].a ].v);
        glVertex3f( obj->v[ obj->p[i].a ].x,
                    obj->v[ obj->p[i].a ].y,
                    obj->v[ obj->p[i].a ].z);

      glTexCoord2f( obj->m[ obj->p[i].b ].u,
                      obj->m[ obj->p[i].b ].v);
        glVertex3f( obj->v[ obj->p[i].b ].x,
                    obj->v[ obj->p[i].b ].y,
                    obj->v[ obj->p[i].b ].z);

      glTexCoord2f( obj->m[ obj->p[i].c ].u,
                      obj->m[ obj->p[i].c ].v);
        glVertex3f( obj->v[ obj->p[i].c ].x,
                    obj->v[ obj->p[i].c ].y,
                    obj->v[ obj->p[i].c ].z);
   }
    glEnd();
}


Flw Abraço.

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Ter Set 07, 2010 3:03 pm 
Offline
Membro intermediário
Avatar do usuário

Registrado em: Sáb Jan 07, 2006 10:40 pm
Mensagens: 96
Localização: Porto Velho (RO)
BRigadão vei!

Mas eu tava observando, e isso não carrega o esqueleto dos modelos, como eu faço pra carregar nesse caso?

_________________
Autobot´s, Transformem!!!


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 3 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB