DXライブラリ ver 3.00e
VC++ 2008 Express Ed.
の環境で、3Dゲーム作成中にテクスチャを入れ替えてアニメーションを作ろうとしたところ、
MV1SetTextureGraphHandleに渡す画像ハンドルが
LoadDivGraphで読み込んだハンドルの場合、適切な場所がテクスチャにならないようです。
適切ではないというのは、画像全体がテクスチャに適応されて、LoadDivGraph で切り取った部分的画像
を適応できないみたいです。
以下テストコードです。
一部流用させていただきました。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
int GrHandle ;
int divGrHandle[4];
int TexIndex ;
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 緑色の目の画像の読みこみ
GrHandle = LoadGraph( "materials/25.JPG" ) ;
LoadDivGraph("materials/coin.jpg",4,2,2,128,128,divGrHandle);
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "materials/sky_test3.mqo" ) ;
// モデルを画面に映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 400.0f ) ) ;
// 目の部分のマテリアルで使用されているテクスチャの番号を取得
TexIndex = MV1GetMaterialDifMapTexture( ModelHandle, 0 ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
ScreenFlip();
WaitKey();
for(int i = 0;i < 10; i++){
// テクスチャで使用するグラフィックハンドルを変更する
MV1SetTextureGraphHandle( ModelHandle, TexIndex, divGrHandle[i%4], FALSE ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
ScreenFlip();
printfDx("LoadDivGraphでロードしたものをテクスチャに指定。\n");
WaitKey();
}
// テクスチャで使用するグラフィックハンドルを変更する
MV1SetTextureGraphHandle( ModelHandle, TexIndex, GrHandle, FALSE ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
ScreenFlip();
printfDx("LoadGraphでロードしたものをテクスチャに指定。\n");
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}