Ignore:
Timestamp:
05/30/06 10:47:05 (19 years ago)
Author:
gumbau
Message:
 
Location:
GTP/trunk/Lib/Geom/shared/GeoTool/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Geom/shared/GeoTool/src/GeoMeshView.cpp

    r985 r993  
    399399            : fltk::GlWindow(x,y,w,h,l) 
    400400{ 
    401                 mStripColors                    =       NULL; 
     401                mStripColors            =       NULL; 
    402402                mSharedPosArray         =       NULL; 
    403403                mSharedNorArray         =       NULL; 
    404                 mPosArray                                       =       NULL; 
    405                 mNorArray                                       =       NULL; 
    406                 mIndexArray                             =       NULL; 
    407     vAng                                                        = 0.0; 
     404                mSharedTexCoordArray=   NULL; 
     405                mPosArray                       =       NULL; 
     406                mNorArray                       =       NULL; 
     407                mTexCoordArray          =       NULL; 
     408                mIndexArray                     =       NULL; 
     409                vAng                            = 0.0; 
    408410                hAng                                                    =       0.0; 
    409411                size                                                    =       0.0; 
     
    432434                //      Cross Reference. 
    433435                mGeoMeshViewUI  =       geoMeshViewUI; 
     436 
     437                current_texture = 0; 
     438                use_texture_mapping = true; 
    434439} 
    435440 
     
    474479                        delete  []      mNorArray[submesh]; 
    475480                        delete  []      mIndexArray[submesh]; 
     481                        delete  []      mTexCoordArray[submesh]; 
    476482                } 
    477483                 
    478484                delete  []      mSharedPosArray; 
    479485                delete  []      mSharedNorArray; 
     486                delete  []      mSharedTexCoordArray; 
    480487                delete  []      mPosArray; 
    481488                delete  []      mNorArray; 
     
    491498                mSharedPosArray =       new GLfloat[vertex_buffer->mVertexCount * 3]; 
    492499                mSharedNorArray =       new GLfloat[vertex_buffer->mVertexCount * 3]; 
     500                mSharedTexCoordArray    =       new GLfloat[vertex_buffer->mVertexCount * 2]; 
    493501 
    494502                for (int vertex = 0; vertex < vertex_buffer->mVertexCount; vertex++) 
    495503                { 
    496                         mSharedPosArray[3 * vertex]                             =       vertex_buffer->mPosition[vertex].x; 
     504                        mSharedPosArray[3 * vertex]                     =       vertex_buffer->mPosition[vertex].x; 
    497505                        mSharedPosArray[(3 * vertex) + 1]       =       vertex_buffer->mPosition[vertex].y; 
    498506                        mSharedPosArray[(3 * vertex) + 2]       =       vertex_buffer->mPosition[vertex].z; 
    499507 
    500                         mSharedNorArray[3 * vertex]                             =       vertex_buffer->mNormal[vertex].x; 
     508                        mSharedNorArray[3 * vertex]                     =       vertex_buffer->mNormal[vertex].x; 
    501509                        mSharedNorArray[(3 * vertex) + 1]       =       vertex_buffer->mNormal[vertex].y; 
    502510                        mSharedNorArray[(3 * vertex) + 2]       =       vertex_buffer->mNormal[vertex].z; 
     511 
     512                        mSharedTexCoordArray[2 * vertex]                =       vertex_buffer->mTexCoords[vertex].x; 
     513                        mSharedTexCoordArray[(2 * vertex) + 1]  =       vertex_buffer->mTexCoords[vertex].y; 
    503514                } 
    504515        } 
     
    507518        mPosArray               =       new GLfloat*[geomesh->mSubMeshCount]; 
    508519        mNorArray               =       new GLfloat*[geomesh->mSubMeshCount]; 
    509         mIndexArray     =       new GLuint*[geomesh->mSubMeshCount]; 
     520        mTexCoordArray  =       new GLfloat*[geomesh->mSubMeshCount]; 
     521        mIndexArray             =       new GLuint*[geomesh->mSubMeshCount]; 
    510522 
    511523        //      For each submesh. 
     
    532544                        mPosArray[submesh]      =       new GLfloat[vertex_buffer->mVertexCount * 3]; 
    533545                        mNorArray[submesh]      =       new GLfloat[vertex_buffer->mVertexCount * 3]; 
     546                        mTexCoordArray[submesh] =       new GLfloat[vertex_buffer->mVertexCount * 2]; 
    534547 
    535548                        //      For each one of the vertex. 
    536549                        for (int vertex = 0; vertex < vertex_buffer->mVertexCount; vertex++) 
    537550                        { 
    538                                 mPosArray[submesh][3 * vertex]                          =       vertex_buffer->mPosition[vertex].x; 
     551                                mPosArray[submesh][3 * vertex]                  =       vertex_buffer->mPosition[vertex].x; 
    539552                                mPosArray[submesh][(3 * vertex) + 1]    =       vertex_buffer->mPosition[vertex].y; 
    540553                                mPosArray[submesh][(3 * vertex) + 2]    =       vertex_buffer->mPosition[vertex].z; 
    541554 
    542                                 mNorArray[submesh][3 * vertex]                          =       vertex_buffer->mNormal[vertex].x; 
     555                                mNorArray[submesh][3 * vertex]                  =       vertex_buffer->mNormal[vertex].x; 
    543556                                mNorArray[submesh][(3 * vertex) + 1]    =       vertex_buffer->mNormal[vertex].y; 
    544557                                mNorArray[submesh][(3 * vertex) + 2]    =       vertex_buffer->mNormal[vertex].z; 
     558 
     559                                mTexCoordArray[submesh][2 * vertex]             =       vertex_buffer->mTexCoords[vertex].x; 
     560                                mTexCoordArray[submesh][(2 * vertex) + 1]       =       vertex_buffer->mTexCoords[vertex].y; 
    545561                        }//     End for each vertex. 
    546562                } 
     
    550566                        mPosArray[submesh]      =       NULL; 
    551567                        mNorArray[submesh]      =       NULL; 
     568                        mTexCoordArray[submesh] =       NULL; 
    552569                } 
    553570 
     
    633650        Index                                   position; 
    634651        Vector3                         vector3; 
     652        Vector2                         vector2; 
    635653        float                                   x,y,z; 
    636654        float                                   r,g,b; 
     
    706724                        //      Sets the vertex normal. 
    707725                        glNormal3f(x,y,z); 
     726 
     727                        // set the texture coordinates if needed 
     728                        if (current_texture && use_texture_mapping) 
     729                        { 
     730                                vector2 = geosubmesh->mVertexBuffer->mTexCoords[position]; 
     731                                x                               =       vector3[0]; 
     732                                y                               =       vector3[1]; 
     733                                glTexCoord2f(x,y); 
     734                        } 
    708735 
    709736                        //      Gets the vertex coordinates. 
     
    789816        glEnableClientState(GL_VERTEX_ARRAY); 
    790817        glEnableClientState(GL_NORMAL_ARRAY); 
     818        if (current_texture && use_texture_mapping) 
     819                glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
     820        else 
     821                glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    791822 
    792823        //      If the submesh is shared vertex. 
     
    795826                glVertexPointer(3, GL_FLOAT, 0, mSharedPosArray); 
    796827                glNormalPointer(GL_FLOAT, 0, mSharedNorArray); 
     828                if (current_texture && use_texture_mapping) 
     829                        glTexCoordPointer(2, GL_FLOAT, 0, mSharedTexCoordArray); 
    797830        } 
    798831        else 
     
    800833                glVertexPointer(3, GL_FLOAT, 0, mPosArray[submesh]); 
    801834                glNormalPointer(GL_FLOAT, 0, mNorArray[submesh]); 
     835                if (current_texture && use_texture_mapping) 
     836                        glTexCoordPointer(2, GL_FLOAT, 0, mTexCoordArray[submesh]); 
    802837        } 
    803838 
     
    10441079        glMatrixMode(GL_PROJECTION); 
    10451080        glLoadIdentity(); 
     1081 
     1082        if (current_texture && use_texture_mapping) 
     1083                glEnable(GL_TEXTURE_2D); 
     1084        else 
     1085                glDisable(GL_TEXTURE_2D); 
    10461086 
    10471087        glEnable(GL_LIGHTING); 
     
    11441184} 
    11451185 
     1186 
     1187#include <IL/ILUT.h> 
     1188 
     1189void    GeoMeshView::LoadTexture(const char *imgfile) 
     1190{ 
     1191        ilInit(); 
     1192        ilutEnable(ILUT_OPENGL_CONV); 
     1193        ilutRenderer(ILUT_OPENGL); 
     1194 
     1195        current_texture = ilutGLLoadImage((const ILstring)imgfile); 
     1196        if (!current_texture) 
     1197                fltk::alert("Error loading texture!"); 
     1198 
     1199        ilShutDown(); 
     1200} 
  • GTP/trunk/Lib/Geom/shared/GeoTool/src/GeoMeshViewUI.cpp

    r990 r993  
    2828        mMainWindow->redraw(); 
    2929} 
     30 
     31inline void GeoMeshViewUI::cb_menuFileLoadTexture_i(fltk::Item*, void*) 
     32{ 
     33        fltk::FileChooser       *fcho = new fltk::FileChooser("","*.jpg",fltk::FileChooser::CREATE,"Open image file"); 
     34        fcho->exec(); 
     35        if (fcho->value()) 
     36                geoMeshView->LoadTexture(fcho->value()); 
     37} 
     38 
     39void GeoMeshViewUI::cb_menuFileLoadTexture(fltk::Item *o, void *v) 
     40{ 
     41        ((GeoMeshViewUI*)       (o->parent()->parent()->parent()->user_data())) 
     42                                                                                -> 
     43                                                                                cb_menuFileLoadTexture_i(o,v); 
     44} 
     45 
    3046 
    3147//--------------------------------------------------------------------------- 
     
    539555        //      Repaint the main window. 
    540556        mMainWindow->redraw(); 
     557        if (geoMeshView->isTextureMappingEnabled()) 
     558                geoMeshView->disableTextureMapping(); 
     559        else 
     560                geoMeshView->enableTextureMapping(); 
    541561} 
    542562 
     
    27712791 
    27722792                                { 
     2793                                        fltk::Item* o = menuFileLoadTexture = new fltk::Item("Load texture"); 
     2794                                        o->callback((fltk::Callback*)cb_menuFileLoadTexture); 
     2795                                } 
     2796 
     2797                                { 
    27732798                                        fltk::Item* o = menuFileQuit = new fltk::Item("Quit"); 
    27742799                                        o->callback((fltk::Callback*)cb_menuFileQuit); 
     
    28802905                                } 
    28812906 
    2882                                 //new fltk::Divider(); 
    2883  
    2884                                 //{ 
    2885                                 //      fltk::Item* o = menuRenderTextures = new fltk::Item("Textures"); 
    2886                                 //      o->callback((fltk::Callback*)cb_menuRenderTextures); 
    2887                                 //} 
     2907                                new fltk::Divider(); 
     2908 
     2909                                { 
     2910                                        fltk::Item* o = menuRenderTextures = new fltk::Item("Texture mapping"); 
     2911                                        o->type(fltk::Item::RADIO); 
     2912                                        o->set_value(); 
     2913                                        o->callback((fltk::Callback*)cb_menuRenderTextures); 
     2914                                } 
    28882915 
    28892916                                o->end(); 
Note: See TracChangeset for help on using the changeset viewer.