====== 017 FBXモデルにテクスチャを張る ====== {{:wiki:opengl:tips:opengl_fbxddstexutredraw.png?200|}} ===== 概要 ===== 読み込んだボリゴンモデルにテクスチャを張ります。 // DDS テクスチャローダー static DDSUtil* s_pDDSLoader = NULL; // UV の取得。 for( size_t j = 0; j < vertex_count ; j++ ) { vtx.vTexcoord.x = (float)fbxNode.texcoordArray.at( j )[0]; vtx.vTexcoord.y = (float)fbxNode.texcoordArray.at( j )[1]; s_pMeshNode[ i ].VtxData.push_back( vtx ); } // マテリアル。 for( size_t j = 0; j < material_count ; j++ ) { FBX_MATERIAL_NODE matNode = fbxNode.materialArray.at( j ); // テクスチャの読み込み。 if( matNode.diffuse.textureSetArray.size() > 0 ) { TextureSet::const_iterator it = matNode.diffuse.textureSetArray.begin(); if( it->second.size() ) { std::string path = it->second[0]; s_pDDSLoader->Load( path.c_str() ); } } } UV座標の取得とテクスチャのロードが完了しました。これで描画の準備は整いました。あとは描画時にテクスチャ、UVをを割り当ててあげれば良いです。 // テクスチャを割り当てる。 if( s_pDDSLoader->GetId() > 0 ) { glEnable( GL_TEXTURE_2D ); glEnableClientState( GL_TEXTURE_COORD_ARRAY ); glBindTexture( GL_TEXTURE_2D, s_pDDSLoader->GetId() ); } else { glDisable( GL_TEXTURE_2D ); glDisableClientState( GL_TEXTURE_COORD_ARRAY ); } if( s_pMeshNode[ i ].VtxData.size() > 1 ) { glVertexPointer( 3, GL_FLOAT, sizeof( VERTEX_DATA ), &s_pMeshNode[ i ].VtxData[ 0 ].vPos.x ); glNormalPointer( GL_FLOAT, sizeof( VERTEX_DATA ), &s_pMeshNode[ i ].VtxData[ 0 ].vNor.x ); if( s_pDDSLoader->GetId() > 0 ) { // UV設定。 glTexCoordPointer( 2, GL_FLOAT, sizeof( VERTEX_DATA ), &s_pMeshNode[ i ].VtxData[ 0 ].vTexcoord.x ); } glDrawArrays( GL_TRIANGLES, 0, s_pMeshNode[ i ].VtxData.size() ); }