Warning: Declaration of action_plugin_linebreak::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/wiki/lib/plugins/linebreak/action.php on line 0

Warning: Declaration of action_plugin_syntaxhighlighter3_action::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/wiki/lib/plugins/syntaxhighlighter3/action/action.php on line 0
017 FBXモデルにテクスチャを張る [stepism]

ユーザ用ツール

サイト用ツール


サイドバー

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