About
Contents
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
Materials Link
その他
PR
STL
Android
Eigen
enchant.js
Firefox OS
OpenGL
OpenGL ES 2.0
pukiwiki
UE4
Unity
Windows Phone
Xamarin
読み込んだボリゴンモデルにテクスチャを張ります。
// 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() ); }