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

LodStripsConstructor? optimized and fixed bug building a lodtree

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.