ユーザ用ツール

サイト用ツール

サイドバー

About

Contents

Materials Link

その他

PR


wiki:opengl:tips:017

017 FBXモデルにテクスチャを張る

概要

読み込んだボリゴンモデルにテクスチャを張ります。

// 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() );
}
Permalink wiki/opengl/tips/017.txt · 最終更新: 2015/01/06 13:48 by step

oeffentlich