bool DsView::loadFile(QString name){
  if(_scene.LoadFile(name.latin1())){
   
   mx=my=mz=0.0;
   int nVerticeTotal = 0;
   _max=0;
   
   for(int i=0;i<_scene.GetMeshCount();i++){
    LMesh * mesh = _scene.GetMesh(i);
    nVerticeTotal =+ mesh->GetVertexCount();
    for(int j=0;j<mesh->GetVertexCount();j++){
     LVector3 v = mesh->GetVertex(j);
     mx =+ v.x;
     my =+ v.y;
     mz =+ v.z;
    }
    
   }
   
   mx = mx/nVerticeTotal;
   #ifdef MYDEBUG
   qDebug(QString::number(mx).latin1());
   qDebug(QString::number(nVerticeTotal).latin1());
   #endif
   my = my/nVerticeTotal;
   #ifdef MYDEBUG
   qDebug(QString::number(my).latin1());
   #endif
   mz = mz/nVerticeTotal;
   #ifdef MYDEBUG
   qDebug(QString::number(mz).latin1());
   #endif
   for(int i=0;i<_scene.GetMeshCount();i++){
    LMesh * mesh = _scene.GetMesh(i);
    for(int j=0;j<mesh->GetVertexCount();j++){
     LVector3 v = mesh->GetVertex(j);
     _max = max(max(max(abs(v.x-mx),abs(v.y-my)),abs(v.z-mz)),_max);
    }
   }
   
   _ortho = _max;
   updateGL();
   
   return true;
  }else{ 
   
   return false;
  }
  
}
Exemple #2
0
void L3DS::ReadMesh(const LChunk &parent)
{
    unsigned short count, i;
    LVector4 p;
    LMatrix4 m;
    LVector2 t;
    p.w = 1.0f;
    LMesh mesh;
    mesh.SetName(m_objName);
    GotoChunk(parent);
    LChunk chunk = ReadChunk();
    while (chunk.end <= parent.end)
    {
        switch (chunk.id)
        {
        case TRI_VERTEXLIST:
            count = ReadShort();
            mesh.SetVertexArraySize(count);
            for (i=0; i < count; i++)
            {
                p.x = ReadFloat();
                p.y = ReadFloat();
                p.z = ReadFloat();
                mesh.SetVertex(p, i);
            }
            break;
        case TRI_FACEMAPPING:
            count = ReadShort();
            if (mesh.GetVertexCount() == 0)
                mesh.SetVertexArraySize(count);
            for (i=0; i < count; i++)
            {
                t.x = ReadFloat();
                t.y = ReadFloat();
                mesh.SetUV(t, i);
            }
            break;
        case TRI_FACELIST:
            ReadFaceList(chunk, mesh);
            break;
        case TRI_MATRIX:
            m._11 = ReadFloat();
            m._12 = ReadFloat();
            m._13 = ReadFloat();

            m._21 = ReadFloat();
            m._22 = ReadFloat();
            m._23 = ReadFloat();

            m._31 = ReadFloat();
            m._32 = ReadFloat();
            m._33 = ReadFloat();

            m._41 = ReadFloat();
            m._42 = ReadFloat();
            m._43 = ReadFloat();

            m._14 = 0.0f;
            m._24 = 0.0f;
            m._34 = 0.0f;
            m._44 = 1.0f;

            mesh.SetMatrix(m);
            break;
        default:
            break;
        }
        SkipChunk(chunk);
        if (chunk.end >= parent.end)
            break;
        chunk = ReadChunk();
    }
    m_meshes.push_back(mesh);
}
Exemple #3
0
void L3DS::ReadMesh(const LChunk &parent)
{

//ErrorMsg("RND:: Ok, try load mesh...\n");

    unsigned short count, i;
    LVector4 p;
    LMatrix4 m;
    LVector2 t;
    p.w = 1.0f;
    LMesh mesh;
    mesh.SetName(m_objName);
    GotoChunk(parent);
    LChunk chunk = ReadChunk();
    while (chunk.end <= parent.end)
    {
//ErrorMsg("RND:: Ochunk.end <= parent.end\n");

        switch (chunk.id)
        {
        case TRI_VERTEXLIST:
//ErrorMsg("RND:: case TRI_VERTEXLIST\n");
            count = ReadShort();
            mesh.SetVertexArraySize(count);
            for (i=0; i < count; i++)
            {
                p.x = ReadFloat();
                p.y = ReadFloat();
                p.z = ReadFloat();
                mesh.SetVertex(p, i);
            }
            break;
        case TRI_FACEMAPPING:
//ErrorMsg("RND:: case TRI_FACEMAPPING\n");
            count = ReadShort();
//          printf("RND:: ReadShort");
            if (count == 0 ) break;
            if (mesh.GetVertexCount() == 0)
                mesh.SetVertexArraySize(count);
                printf("count: %d",count);
            for (i=0; i < count; i++)
            {
                t.x = ReadFloat();
                t.y = ReadFloat();
                mesh.SetUV(t, i);
//                printf("RND:: set: %f %f",t.x,t.y);
            }
            break;
        case TRI_FACELIST:
//ErrorMsg("RND:: case TRI_FACELIST\n");
            ReadFaceList(chunk, mesh);
            break;
        case TRI_MATRIX:
//ErrorMsg("RND:: case TRI_MATRIX\n");
            m._11 = ReadFloat();
            m._12 = ReadFloat();
            m._13 = ReadFloat();

            m._21 = ReadFloat();
            m._22 = ReadFloat();
            m._23 = ReadFloat();

            m._31 = ReadFloat();
            m._32 = ReadFloat();
            m._33 = ReadFloat();

            m._41 = ReadFloat();
            m._42 = ReadFloat();
            m._43 = ReadFloat();

            m._14 = 0.0f;
            m._24 = 0.0f;
            m._34 = 0.0f;
            m._44 = 1.0f;

            mesh.SetMatrix(m);
            break;
        default:
            break;
        }
        SkipChunk(chunk);
        if (chunk.end >= parent.end)
            break;
        chunk = ReadChunk();
    }
    m_meshes.push_back(mesh);
}