Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4080 in orxonox.OLD for orxonox/branches/md2_loader/src


Ignore:
Timestamp:
May 6, 2005, 12:55:52 PM (20 years ago)
Author:
patrick
Message:

orxonox/branches/md2_loader: implemented md2 import function, smooth an ez

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/md2_loader/src/lib/graphics/importer/md2Model.cc

    r4079 r4080  
    1717#include "md2Model.h"
    1818
    19 //#include <stdio.h>
    20 //#include <stdlib.h>
    21 //#include <string>
    2219#include <fstream>
     20
     21#include "list.h"
    2322
    2423
     
    8483bool MD2Loader::importMD2(t3DModel *pModel, char *fileName, char *textureName)
    8584{
    86         char strMessage[255] = {0};
    87 
    8885        this->pFile = fopen(fileName, "rb");
    8986        if( unlikely(!pFile))
     
    105102        if( likely((int)textureName))
    106103        {
    107                 tMaterialInfo textureInfo;
    108                 strcpy(textureInfo.strFile, textureName);
     104                tMaterialInfo* textureInfo = new tMaterialInfo;
     105                strcpy(textureInfo->strFile, textureName);
    109106                /* since there is only one texture for a .Md2 file, the ID is always 0 */
    110                 textureInfo.texureId = 0;
    111                 textureInfo.uTile = 1;
     107                textureInfo->texureId = 0;
     108                textureInfo->uTile = 1;
    112109                /* we only have 1 material for a model */
    113110                pModel->numOfMaterials = 1;
    114                 //pModel->materialList.add(texture);
     111                pModel->materialList->add(textureInfo);
    115112        }
    116113       
     
    123120*/
    124121void MD2Loader::readMD2Data()
    125 {}
     122{
     123        unsigned char buffer[MD2_MAX_FRAMESIZE];
     124        this->pSkins     = new tMd2Skin[this->header.numSkins];
     125        this->pTexCoords = new tMd2TexCoord[this->header.numTexCoords];
     126        this->pTriangles = new tMd2Face[this->header.numTriangles];
     127        this->pFrames    = new tMd2Frame[this->header.numFrames];
     128
     129        /* we read the skins */
     130        fseek(this->pFile, this->header.offsetSkins, SEEK_SET);
     131        fread(this->pSkins, sizeof(tMd2Skin), this->header.numSkins, this->pFile);
     132        /* read all vertex data */
     133        fseek(this->pFile, this->header.offsetTexCoords, SEEK_SET);
     134        fread(this->pTexCoords, sizeof(tMd2TexCoord), this->header.numTexCoords, this->pFile);
     135        /* read face data for each triangle (normals) */
     136        fseek(this->pFile, this->header.offsetTriangles, SEEK_SET);
     137        fread(this->pTriangles, sizeof(tMd2Face), this->header.numTriangles, this->pFile);
     138        /* reading all frame data */
     139        fseek(this->pFile, this->header.offsetFrames, SEEK_SET);
     140        for(int i = 0; i < this->header.numFrames; i++)
     141        {
     142                tMd2AliasFrame *pFrame = (tMd2AliasFrame *) buffer;
     143                this->pFrames[i].pVertices = new tMd2Triangle [this->header.numVertices];
     144
     145                /* read the frame animation data */
     146                fread(pFrame, 1, this->header.frameSize, this->pFile);
     147                strcpy(this->pFrames[i].strName, pFrame->name);
     148                tMd2Triangle *pVertices = this->pFrames[i].pVertices;
     149                /*
     150                   scale translations, store vertices: since id used a non-opengl xyz notation, we have to swap y and z
     151                   and negate z axis
     152                */
     153                for(int j = 0; j < this->header.numVertices; j++)
     154                {
     155                        pVertices[j].vertex[0] = pFrame->aliasVertices[j].vertex[0] * pFrame->scale[0] + pFrame->translate[0];
     156                        pVertices[j].vertex[2] = -1 * (pFrame->aliasVertices[j].vertex[1] * pFrame->scale[1] + pFrame->translate[1]);
     157                        pVertices[j].vertex[1] = pFrame->aliasVertices[j].vertex[2] * pFrame->scale[2] + pFrame->translate[2];
     158                }
     159        }
     160}
    126161
    127162/**
Note: See TracChangeset for help on using the changeset viewer.