DXライブラリVC++で、3D空間にアニメエフェクトを作ろうとしているものです、
強力な静電気を表現しようと思ってはじめました。
そこで、3Dで表示するのは面倒そうなので3D空間に2Dアニメーションを表示にすることにしました。
2Dアニメーションの経験はある程度あります。(2Dゲームでアニメーション作るぐらいなら楽勝)
が、3Dにきてつまずきました。
方法1:テクスチャをいれかえる。
MV1SetTextureGraphHandle(charge_light, textIndex, lightning[index%16], FALSE) ;
を使おうとしたのですが、どうも変わらない。
戻り値は0。
以下、引数説明
int MHandle : モデルのハンドル
には、int charge_light = MV1LoadModel("materials/lightning.mqo");
こんな感じでロードした charge_lightを指定。
int GrHandle : テクスチャとして使用するグラフィックハンドル
には、ちゃんと、64×64の画像。LoadDivGraph でpngを、ロードしたハンドル。
lightning[index%16]
こんな感じで指定。indexは毎フレーム増加
int TexIndex : テクスチャの番号
には
int textIndex = MV1GetMaterialDifMapTexture(charge_light, 0);
こんな感じで取得した番号を指定。
方法2:フレームの利用。
UV操作でメタセコがうまく使えないorz
これ、未経験者には操作がかなり難しいです。
方法3:画像をファイル単位で分割、mqoをアニメのこま数だけ容易。
確実にできるけど、一番よくない方法だと思う。
こんな状況です。解決策教えてください。
DXライブラリ:テクスチャの入れ替え
Re:DXライブラリ:テクスチャの入れ替え
何かが間違っているのだと思いますが、それだけでは検討もつきません。
状況を再現可能な素材込みの小規模なプロジェクト一式をアップしてみてはどうでしょうか。
状況を再現可能な素材込みの小規模なプロジェクト一式をアップしてみてはどうでしょうか。
おそらくバグ
おそらく、LoadDivGraphでロードした画像をテクスチャに指定すると、画像全体が指定されてしまうようです。
どうやら、DXライブラリのバグのようなので本家のほうで報告してみます。
以下テストコードです。
どうやら、DXライブラリのバグのようなので本家のほうで報告してみます。
以下テストコードです。
#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 ; }