Ignore:
Timestamp:
06/15/06 11:50:48 (19 years ago)
Author:
gumbau
Message:

LodStripsConstructor? optimized and fixed bug building a lodtree

Location:
GTP/trunk/Lib/Geom/shared/GeoTool
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Geom/shared/GeoTool/include/GeoMeshSaver.h

    r989 r1017  
    113113                        //      Saves a Mesh into a file. 
    114114                        int     save(Mesh       *geoMesh,       const   char    *fileNameMesh); 
     115 
     116                        // temporal members used to tweak the lodtree leaf submesh 
     117                        int leavesSubMesh; 
     118                        VertexBuffer *leavesVB; 
     119                        Index *indices; 
     120                        int numindices; 
    115121        }; 
    116122} 
  • GTP/trunk/Lib/Geom/shared/GeoTool/src/GeoMeshSaver.cpp

    r989 r1017  
    2323GeoMeshSaver::GeoMeshSaver() 
    2424{ 
     25        leavesSubMesh=-1; 
     26        leavesVB=NULL; 
     27        numindices=0; 
     28        indices=NULL; 
    2529} 
    2630 
     
    6064        unnormalizeModel(mGeoMesh); 
    6165 
     66        if (leavesSubMesh>-1 && leavesVB) 
     67        { 
     68                Vector3 bmax(geoMesh->mMeshBounds.maxX,geoMesh->mMeshBounds.maxY,geoMesh->mMeshBounds.maxZ); 
     69                Vector3 bmin(geoMesh->mMeshBounds.minX,geoMesh->mMeshBounds.minY,geoMesh->mMeshBounds.minZ); 
     70                Vector3 center = (bmax+bmin)*0.5f; 
     71                float scale = geoMesh->mMeshBounds.scaleFactor; 
     72                 
     73                mGeoMesh->mSubMesh[leavesSubMesh].mSharedVertexBuffer=false; 
     74                mGeoMesh->mSubMesh[leavesSubMesh].mStripCount=0; 
     75                mGeoMesh->mSubMesh[leavesSubMesh].mIndexCount=numindices; 
     76                int icount = mGeoMesh->mSubMesh[leavesSubMesh].mIndexCount; 
     77                mGeoMesh->mSubMesh[leavesSubMesh].mIndex=new Index[icount]; 
     78                for (int i=0; i<icount; i++) 
     79                        mGeoMesh->mSubMesh[leavesSubMesh].mIndex[i]=indices[i]; 
     80 
     81                mGeoMesh->mSubMesh[leavesSubMesh].mType=GEO_TRIANGLE_LIST; 
     82                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer=new VertexBuffer(); 
     83                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mVertexInfo=VERTEX_POSITION; 
     84                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mVertexCount=leavesVB->mVertexCount;; 
     85                int vcount = mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mVertexCount; 
     86                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mPosition=new Vector3[vcount]; 
     87                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mNormal=new Vector3[vcount]; 
     88                mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mTexCoords=new Vector2[vcount]; 
     89                for (int i=0; i<vcount; i++) 
     90                { 
     91                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mPosition[i].x = leavesVB->mPosition[i].x / scale + center.x; 
     92                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mPosition[i].y = leavesVB->mPosition[i].y / scale + center.y; 
     93                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mPosition[i].z = leavesVB->mPosition[i].z / scale + center.z; 
     94                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mNormal[i].x = leavesVB->mNormal[i].x; 
     95                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mNormal[i].y = leavesVB->mNormal[i].y; 
     96                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mNormal[i].z = leavesVB->mNormal[i].z; 
     97                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mTexCoords[i].x = leavesVB->mTexCoords[i].x; 
     98                        mGeoMesh->mSubMesh[leavesSubMesh].mVertexBuffer->mTexCoords[i].y = leavesVB->mTexCoords[i].y; 
     99                } 
     100        } 
     101 
    62102        //      Open the file. 
    63         mSerializer     =       new     Serializer(     name, 
    64                                                                                                                                 Serializer::WRITE); 
    65  
     103        mSerializer     =       new     Serializer(name,Serializer::WRITE); 
    66104 
    67105        //      Write the file header. 
     
    773811        //      Translate around center then scale. 
    774812        //      For each submesh. 
     813 
     814        bool sharedScaled=false; 
     815 
    775816        for (int submesh = 0; submesh < geoMesh->mSubMeshCount; submesh++) 
    776817        { 
     
    778819                vertex_buffer   =       geoMesh->mSubMesh[submesh].mVertexBuffer; 
    779820 
     821                if (geoMesh->mSubMesh[submesh].mSharedVertexBuffer && sharedScaled) 
     822                        continue; 
     823                         
    780824                //      For each index of the strip. 
    781825                for (int i = 0; i < vertex_buffer->mVertexCount; i++) 
     
    791835                //      If is a shared vertex Buffer. 
    792836                if (geoMesh->mSubMesh[submesh].mSharedVertexBuffer) 
    793                 { 
    794                         break; 
    795                 } 
    796         } 
    797 } 
    798  
     837                        sharedScaled=true; 
     838        } 
     839} 
     840 
  • GTP/trunk/Lib/Geom/shared/GeoTool/src/GeoMeshViewUI.cpp

    r1014 r1017  
    10031003} 
    10041004 
     1005VertexBuffer *origSubMeshVB=NULL; 
     1006int orig_numindices=0; 
     1007Index *orig_indices=NULL; 
     1008 
    10051009//--------------------------------------------------------------------------- 
    10061010//      Button Process Callback 
     
    10141018        progressBarType =       PROCESS; 
    10151019        mProcessBar->position(0); 
     1020 
     1021        origSubMeshVB=NULL; 
    10161022 
    10171023        //      Initialize error flag. 
     
    10801086                                else 
    10811087                                { 
     1088                                        origSubMeshVB=mGeoMesh->mSubMesh[idMeshLeaves].mVertexBuffer->Clone(); 
     1089                                        orig_numindices=mGeoMesh->mSubMesh[idMeshLeaves].mIndexCount; 
     1090                                        orig_indices=new Index[orig_numindices]; 
     1091                                        for (int i=0; i<orig_numindices; i++) 
     1092                                                orig_indices[i]=mGeoMesh->mSubMesh[idMeshLeaves].mIndex[i]; 
     1093 
    10821094                                        std::cout << "Simplificando hojas..."; 
    10831095                                        simplifyLeavesCollapse(); 
     
    13241336                                                file_name[strlen(file_name) - 4]        =       '\0'; 
    13251337                                                 
     1338                                                mesh_saver->leavesSubMesh=idMeshLeaves; 
     1339                                                mesh_saver->leavesVB=origSubMeshVB; 
     1340                                                mesh_saver->numindices=orig_numindices; 
     1341                                                mesh_saver->indices=orig_indices; 
    13261342                                                mesh_saver->save(       mGeoMesh, 
    13271343                                                                                                                        strcat(file_name,".mesh")); 
Note: See TracChangeset for help on using the changeset viewer.