テクスチャ関係

宣言int MV1GetTextureNum( int MHandle ) ;

概略モデルで使用されているテクスチャの数を取得する

引数 int MHandle : モデルのハンドル
戻り値-1以外:モデルで使用されているテクスチャの数
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャの総数を取得します。

サンプル

  モデルファイル SimpleModel.mqo で使用されているテクスチャの情報を一つづつ描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; int i, TextureNum ; int Width, Height, GrHandle ; const char *String ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // モデルに含まれるテクスチャの総数を取得する TextureNum = MV1GetTextureNum( ModelHandle ) ; // テクスチャの数だけ繰り返し for( i = 0 ; i < TextureNum ; i ++ ) { // 画面をクリアする ClearDrawScreen() ; // テクスチャのグラフィックハンドルを取得する GrHandle = MV1GetTextureGraphHandle( ModelHandle, i ) ; // テクスチャの名前を描画する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Name %s", MV1GetTextureName( ModelHandle, i ) ) ; // テクスチャの大きさを描画する GetGraphSize( GrHandle, &Width, &Height ) ; DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Size %dx%d", Width, Height ) ; // テクスチャのU値のアドレスモードを描画する switch( MV1GetTextureAddressModeU( ModelHandle, i ) ) { case DX_TEXADDRESS_WRAP : String = "DX_TEXADDRESS_WRAP" ; break ; case DX_TEXADDRESS_MIRROR : String = "DX_TEXADDRESS_MIRROR" ; break ; case DX_TEXADDRESS_CLAMP : String = "DX_TEXADDRESS_CLAMP" ; break ; } DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Address Mode U %s", String ) ; // テクスチャのV値のアドレスモードを描画する switch( MV1GetTextureAddressModeV( ModelHandle, i ) ) { case DX_TEXADDRESS_WRAP : String = "DX_TEXADDRESS_WRAP" ; break ; case DX_TEXADDRESS_MIRROR : String = "DX_TEXADDRESS_MIRROR" ; break ; case DX_TEXADDRESS_CLAMP : String = "DX_TEXADDRESS_CLAMP" ; break ; } DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Address Mode V %s", String ) ; // テクスチャのフィルタリングモードを描画する switch( MV1GetTextureSampleFilterMode( ModelHandle, i ) ) { case DX_DRAWMODE_NEAREST : String = "DX_DRAWMODE_NEAREST" ; break ; case DX_DRAWMODE_BILINEAR : String = "DX_DRAWMODE_BILINEAR" ; break ; case DX_DRAWMODE_ANISOTROPIC : String = "DX_DRAWMODE_ANISOTROPIC" ; break ; } DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Sample Filter Mode %s", String ) ; // テクスチャを描画する DrawGraph( 0, 80, GrHandle, TRUE ) ; // キー入力待ち WaitKey() ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言const char *MV1GetTextureName( int MHandle, int TexIndex ) ;

概略テクスチャの名前を取得する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
戻り値NULL以外:テクスチャの名前( ファイルパスではありません )
 NULL:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャの名前を取得します。
 xファイル や mqoファイルではテクスチャの名前という情報が無いので、 ファイル名がテクスチャの名前として使用されます。


サンプル

 MV1GetTextureNum関数 のサンプルを参照してください。



宣言int MV1SetTextureGraphHandle( int MHandle, int TexIndex, int GrHandle, int SemiTransFlag ) ;

概略テクスチャとして使用するグラフィックハンドルを変更する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
int GrHandle : テクスチャとして使用するグラフィックハンドル
int SemiTransFlag : グラフィックハンドルに半透明要素があるかどうか( TRUE:ある FALSE:ない )
戻り値0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用するテクスチャのグラフィックハンドルを変更します。
 変更後はモデル中の変更されたテクスチャを使用しているマテリアルの部分が GrHandle で指定した画像になります。
 色違いキャラクターを表現したりする場合に便利です。

 尚、3Dモデルは半透明要素があるかどうかの情報をよく使いますので、 セットするグラフィックハンドルに半透明の部分があるかどうかを SemiTransFlag で指定します、ある場合は TRUE を、無い場合は FALSE を渡してください。

 注意点として、GrHandle に渡すグラフィックハンドルの画像の幅や高さは 2 の n乗( 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ... ) である必要があり、また、LoadDivGraph で分割読込した画像や、DerivationGraph で派生させた画像は使用することができません。 ( エラーにはなりませんが期待する描画結果は得られません )

 画像のサイズについては、グラフィックスデバイスの性能によって扱える画像の最大サイズが変化しますので。
 2009年時点で多くの環境で安心して使える画像の最大サイズは恐らく 2048 くらいまで、 3D機能を持ち始めたばかりのノートパソコン等では 1024 くらいまでの対応となります。

 因みに、GrHandle に -1 を渡すと元のテクスチャのグラフィックハンドルを使用するようになります。

サンプル

  モデルファイル DxChara.x で使用されている目のテクスチャを緑色の目の画像に変更します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; int GrHandle ; int TexIndex ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 緑色の目の画像の読みこみ GrHandle = LoadGraph( "DxCharaEye2.tga" ) ; // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // モデルを画面に映る位置に移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 400.0f ) ) ; // 目の部分のマテリアルで使用されているテクスチャの番号を取得 TexIndex = MV1GetMaterialDifMapTexture( ModelHandle, 4 ) ; // テクスチャで使用するグラフィックハンドルを変更する MV1SetTextureGraphHandle( ModelHandle, TexIndex, GrHandle, FALSE ) ; // モデルを描画する MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // 読み込んだ画像のグラフィックハンドルを削除 DeleteGraph( GrHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetTextureGraphHandle( int MHandle, int TexIndex ) ;

概略テクスチャのグラフィックハンドルを取得する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
戻り値-1以外:テクスチャのグラフィックハンドル
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャで使用されるグラフィックハンドルを取得します。
 取得したグラフィックハンドルは普通のグラフィックハンドルと同じように DrawGraph で描画したり、 GetGraphSize でサイズを取得したりすることができます。


サンプル

 MV1GetTextureNum関数 のサンプルを参照してください。



宣言int MV1SetTextureAddressMode( int MHandle, int TexIndex, int AddrUMode, int AddrVMode ) ;

概略テクスチャのアドレスモードを変更する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
int AddrUMode : U値のアドレスモード
int AddrVMode : V値のアドレスモード
戻り値0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用するテクスチャを描画する際に使用されるアドレスモードを変更します。

 アドレスモードとは画像サイズ以上のテクスチャ座標が指定された場合にどう表示するかというもので、以下の3種類があります。


DX_TEXADDRESS_WRAP

 画像サイズ以上のテクスチャ座標の部分は素直に繰り返します。


DX_TEXADDRESS_MIRROR

 画像サイズ以上のテクスチャ座標の部分は鏡に映されたように反転する表示と、もとの反転していない表示とを繰り返します。
 例えば4倍のテクスチャ座標が指定された場合 通常の見た目・反転した見た目・通常の見た目・反転した見た目 という風になります。


DX_TEXADDRESS_CLAMP

 他のモードと違って画像が繰り返されず、画像サイズ以上のテクスチャ座標の部分は画像の端のピクセルが引き伸ばされたような見た目になります。


 アドレスモードはU方向とV方向で別々に指定することができます。
 初期状態ではU,V共に DX_TEXADDRESS_WRAP です。

サンプル

  モデルファイル AddressTest.mqo で使用されているテクスチャのアドレスモードを、横方向は DX_TEXADDRESS_MIRROR に
 縦方向は DX_TEXADDRESS_CLAMP にして描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "AddressTest.mqo" ) ; // モデルを画面に映る位置に移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 400.0f ) ) ; // テクスチャ0番のアドレスモードを横方向は DX_TEXADDRESS_MIRROR に、 // 縦方向は DX_TEXADDRESS_CLAMP に変更する MV1SetTextureAddressMode( ModelHandle, 0, DX_TEXADDRESS_MIRROR, DX_TEXADDRESS_CLAMP ) ; // モデルを描画する MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetTextureAddressModeU( int MHandle, int TexIndex ) ;

概略テクスチャのU値のアドレスモードを取得する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
戻り値-1以外:テクスチャのU値のアドレスモード
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャを描画する際に使用されるU値のアドレスモードを取得します。
 戻り値であるアドレスモードについては関数 MV1SetTextureAddressMode の解説を参照してください。


サンプル

 MV1GetTextureNum関数 のサンプルを参照してください。



宣言int MV1GetTextureAddressModeV( int MHandle, int TexIndex ) ;

概略テクスチャのV値のアドレスモードを取得する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
戻り値-1以外:テクスチャのV値のアドレスモード
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャを描画する際に使用されるV値のアドレスモードを取得します。
 戻り値であるアドレスモードについては関数 MV1SetTextureAddressMode の解説を参照してください。


サンプル

 MV1GetTextureNum関数 のサンプルを参照してください。



宣言int MV1SetTextureSampleFilterMode( int MHandle, int TexIndex, int FilterMode ) ;

概略テクスチャのフィルタリングモードを変更する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
int FilterMode : フィルタリングモード
戻り値0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用するテクスチャを描画する際に使用されるフィルタリングモードを変更します。

 フィルタリングモードはポリゴンに貼り付けられ、変形して画面に表示されることになるテクスチャをどのように描画するかと言うもので、以下の3種類があります。


DX_DRAWMODE_NEAREST

 最近点フィルタリング方式です。
 画面にピクセルを描画する際に、テクスチャ中の計算上一番適している1ピクセルのみを使って描画します。
 画面にテクスチャの解像度以上の大きさに描画されるとドットが四角く表示されます。

DX_DRAWMODE_BILINEAR

 線形フィルタリング方式です。
 画面にピクセルを描画する際に、テクスチャ中の計算上適している上位4ピクセルの色を合成して描画します。
 画面にテクスチャの解像度以上の大きさに描画されると、 ドット同士の色の合成が行われるので DX_DRAWMODE_NEAREST と違いボヤっとした見た目になります。

DX_DRAWMODE_ANISOTROPIC

 異方性フィルタリング方式です。
 画面に描画するピクセルの色を複雑な計算をして決定します。
 画面に拡大されて描画される際は DX_DRAWMODE_BILINEAR とあまり違いはありませんが、 画面に元の画像よりも小さく、つまり縮小されて描画される場合は DX_DRAWMODE_BILINEAR より良好な描画結果が得られます。( デフォルトではこのタイプです )


 因みに描画負荷は DX_DRAWMODE_ANISOTROPIC が一番重く、 次に DX_DRAWMODE_BILINEAR、一番軽いのは DX_DRAWMODE_NEAREST です。

サンプル

  モデルファイル FilterTest.mqo で使用されているテクスチャのフィルタリングモードを DX_DRAWMODE_NEAREST にして描画します。
  ドットとドットの間がくっきり分かれた見た目になります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "FilterTest.mqo" ) ; // モデルを画面に映る位置に移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 400.0f ) ) ; // テクスチャ0番のフィルタリングモードを DX_DRAWMODE_NEAREST に変更 MV1SetTextureSampleFilterMode( ModelHandle, 0, DX_DRAWMODE_NEAREST ) ; // モデルを描画する MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetTextureSampleFilterMode( int MHandle, int TexIndex ) ;

概略テクスチャのフィルタリングモードを取得する

引数 int MHandle : モデルのハンドル
int TexIndex : テクスチャの番号
戻り値-1以外:テクスチャのフィルタリングモード
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルで使用されているテクスチャを描画する際に使用されるフィルタリングモードを取得します。
 戻り値であるアドレスモードについては関数 MV1SetTextureSampleFilterMode の解説を参照してください。


サンプル

 MV1GetTextureNum関数 のサンプルを参照してください。



フレーム関係

宣言int MV1GetFrameNum( int MHandle ) ;

概略フレームの数を取得する

引数 int MHandle : モデルのハンドル
戻り値-1以外:モデルに含まれるフレームの数
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの数を取得します。

サンプル

  モデルファイル DxChara.x に含まれるフレームの情報を一つづつ表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, FrameNum, i, Parent ; VECTOR Position ; MATRIX Matrix ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // フレームの数を取得する FrameNum = MV1GetFrameNum( ModelHandle ) ; // フレームの数だけループ for( i = 0 ; i < FrameNum ; i ++ ) { // 画面をクリア ClearDrawScreen() ; // フレーム名の描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Name %s", MV1GetFrameName( ModelHandle, i ) ) ; // 親フレーム名の描画 Parent = MV1GetFrameParent( ModelHandle, i ) ; if( Parent == -2 ) { DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Parent Name None" ) ; } else { DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Parent Name %s", MV1GetFrameName( ModelHandle, Parent ) ) ; } // 子フレームの数を描画 DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Child Num %d", MV1GetFrameChildNum( ModelHandle, i ) ) ; // フレームのワールド座標の描画 Position = MV1GetFramePosition( ModelHandle, i ) ; DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Position x:%f y:%f z:%f", Position.x, Position.y, Position.z ) ; // 変換行列を描画する Matrix = MV1GetFrameLocalMatrix( ModelHandle, i ) ; DrawFormatString( 0, 64, GetColor( 255,255,255 ), " Matrix %f %f %f %f", Matrix.m[ 0 ][ 0 ], Matrix.m[ 0 ][ 1 ], Matrix.m[ 0 ][ 2 ], Matrix.m[ 0 ][ 3 ] ) ; DrawFormatString( 0, 80, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 1 ][ 0 ], Matrix.m[ 1 ][ 1 ], Matrix.m[ 1 ][ 2 ], Matrix.m[ 1 ][ 3 ] ) ; DrawFormatString( 0, 96, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 2 ][ 0 ], Matrix.m[ 2 ][ 1 ], Matrix.m[ 2 ][ 2 ], Matrix.m[ 2 ][ 3 ] ) ; DrawFormatString( 0, 112, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 3 ][ 0 ], Matrix.m[ 3 ][ 1 ], Matrix.m[ 3 ][ 2 ], Matrix.m[ 3 ][ 3 ] ) ; // フレームのローカル座標からワールド座標に変換する行列を描画する Matrix = MV1GetFrameLocalWorldMatrix( ModelHandle, i ) ; DrawFormatString( 0, 128, GetColor( 255,255,255 ), "LW Matrix %f %f %f %f", Matrix.m[ 0 ][ 0 ], Matrix.m[ 0 ][ 1 ], Matrix.m[ 0 ][ 2 ], Matrix.m[ 0 ][ 3 ] ) ; DrawFormatString( 0, 144, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 1 ][ 0 ], Matrix.m[ 1 ][ 1 ], Matrix.m[ 1 ][ 2 ], Matrix.m[ 1 ][ 3 ] ) ; DrawFormatString( 0, 160, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 2 ][ 0 ], Matrix.m[ 2 ][ 1 ], Matrix.m[ 2 ][ 2 ], Matrix.m[ 2 ][ 3 ] ) ; DrawFormatString( 0, 176, GetColor( 255,255,255 ), " %f %f %f %f", Matrix.m[ 3 ][ 0 ], Matrix.m[ 3 ][ 1 ], Matrix.m[ 3 ][ 2 ], Matrix.m[ 3 ][ 3 ] ) ; // フレームの表示状態を描画 DrawFormatString( 0, 192, GetColor( 255,255,255 ), "Visible %d", MV1GetFrameVisible( ModelHandle, i ) ) ; // フレームに半透明要素があるかどうかを描画 DrawFormatString( 0, 208, GetColor( 255,255,255 ), "Semi Trans %d", MV1GetFrameSemiTransState( ModelHandle, i ) ) ; // フレームに含まれるメッシュの数を描画 DrawFormatString( 0, 224, GetColor( 255,255,255 ), "Mesh Num %d", MV1GetFrameMeshNum( ModelHandle, i ) ) ; // フレームに含まれる三角形ポリゴンの数を描画 DrawFormatString( 0, 240, GetColor( 255,255,255 ), "Triangle Num %d", MV1GetFrameTriangleNum( ModelHandle, i ) ) ; // キーの入力待ち WaitKey() ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1SearchFrame( int MHandle, char *FrameName ) ;

概略指定名のフレームをモデル中から検索する

引数 int MHandle : モデルのハンドル
char *FrameName : フレーム名
戻り値0以上:指定名のフレームの番号
  -2:指定名のフレームが見つからなかった
  -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームから、指定の名前のものを検索します。

 同名のフレームが複数含まれる場合は番号の若いフレームが返ってきます。

サンプル

  モデルファイル DxChara.x に含まれる名前が Mesh_1 のフレームの番号を表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // フレーム名 Mesh_1 のフレームの番号を画面に描画する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "%d", MV1SearchFrame( ModelHandle, "Mesh_1" ) ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1SearchFrameChild( int MHandle, int FrameIndex, char *ChildName ) ;

概略指定名のフレームを指定のフレームの子フレームの中から検索する

引数 int MHandle : モデルのハンドル
int FrameIndex : 検索対象のフレームの番号
char *ChildName : フレーム名
戻り値0以上:指定名のフレームの番号
  -2:指定名のフレームが見つからなかった
  -1:エラー発生

解説  MHandle のモデルハンドルが示すモデル内の指定のフレームが持つ子フレームの中から、指定の名前のフレームを検索します。

 指定のフレームが持つ子フレームだけではなく、子フレームが持つ子フレームも検索の対象になります。
 同名のフレームが含まれる場合は番号の若いフレームが返ってきます。

サンプル

  モデルファイル DxChara.x に含まれる2番目のフレームの子フレームの中から Koshi という名前のフレームの番号を検索します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // モデルの2番目のフレームが持つ子フレームの中から AnkleR という名前のフレームの番号を検索して画面に描画する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "%d", MV1SearchFrameChild( ModelHandle, 2, "AnkleR" ) ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言char *MV1GetFrameName( int MHandle, int FrameIndex ) ;

概略フレームの名前を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値NULL以外:フレームの名前
 NULL:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの名前を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言int MV1GetFrameParent( int MHandle, int FrameIndex ) ;

概略フレームの親フレームを取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値0以上:親フレームの番号
 -2:親フレームが無い
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの親フレームのフレーム番号を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言int MV1GetFrameChildNum( int MHandle, int FrameIndex ) ;

概略フレームの子フレームの数を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値0以上:子フレームの数
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームが持つ子フレームの数を取得します。

 FrameIndex を -1 にすると親が居ないフレームの数が返ってきます。

サンプル

  モデルファイル DxChara.x に含まれる0番目のフレームの子フレームの名前を描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, i, ChildNum, FrameIndex ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // フレーム0番の子フレームの数を取得 ChildNum = MV1GetFrameChildNum( ModelHandle, 0 ) ; // 子フレームの数だけループ for( i = 0 ; i < ChildNum ; i ++ ) { // 子フレームのフレーム番号を取得 FrameIndex = MV1GetFrameChild( ModelHandle, 0, i ) ; // 子フレームの名前を表示 DrawFormatString( 0, i * 16, GetColor( 255,255,255 ), "%s", MV1GetFrameName( ModelHandle, FrameIndex ) ) ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetFrameChild( int MHandle, int FrameIndex, int ChildIndex ) ;

概略フレームの子フレームを取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
int ChildIndex : 子フレーム番号
戻り値0以上:子フレームのフレーム番号
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームが持つ子フレームのフレーム番号を取得します。

 FrameIndex を -1 にすると、親の居ないフレームが取得できます。

 尚、ChildIndex に MV1GetFrameChildNum 関数で取得できる子フレームの数以上の値を渡すとエラーとなります。

サンプル

 MV1GetFrameChildNum関数 のサンプルを参照してください。



宣言VECTOR MV1GetFramePosition( int MHandle, int FrameIndex ) ;

概略フレームの座標を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのワールド座標
解説  MHandle のモデルハンドルが示すモデルに含まれるフレームのワールド座標を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言MATRIX MV1GetFrameLocalMatrix( int MHandle, int FrameIndex ) ;

概略フレームの座標変換行列を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームの変換行列
解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの変換行列を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言MATRIX MV1GetFrameLocalWorldMatrix( int MHandle, int FrameIndex ) ;

概略フレームのローカル座標からワールド座標に変換する行列を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのローカル→ワールド行列

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームのローカル座標からワールド座標に変換する行列を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言int MV1SetFrameUserLocalMatrix( int MHandle, int FrameIndex, MATRIX Matrix ) ;

概略フレームの座標変換行列を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
MATRIX Matrix : フレームに設定する変換行列
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの変換行列として引数で渡す Matrix の値を使用するようにします。

 この関数を使用して行列を設定すると、 以降 MV1ResetFrameUserLocalMatrix で設定が解除されるまでこの関数で設定した行列が使用されます。 ( 行列を設定したフレームに対するキーが打たれているアニメーションを再生しても、 この関数で設定した行列が優先されます )

サンプル

  モデルファイル SimpleModel.mqo に含まれる2番目のフレームの変換行列を下方向に 300.0f 移動する
 行列にしてから描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // モデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // モデルを見える位置に移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 800.0f ) ) ; // 2番目のフレームに下に動くのローカル行列をセットする MV1SetFrameUserLocalMatrix( ModelHandle, 2, MGetTranslate( VGet( 0.0f, -300.0f, 0.0f ) ) ) ; // モデルを描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1ResetFrameUserLocalMatrix( int MHandle, int FrameIndex ) ;

概略フレームの座標変換行列をデフォルトに戻す

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値 0:成功
 -1:エラー発生

解説  関数 MV1SetFrameUserLocalMatrix で設定した行列の効果を解除します。

サンプル

  モデルファイル SimpleModel.mqo に含まれる2番目のフレームの変換行列を下方向に 300.0f 移動する
 行列をセットしたり解除したりを1秒単位で行いつつ描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, Time, UseMatrix ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // モデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // モデルを見える位置に移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 800.0f ) ) ; // 行列を使用するかどうかのフラグを1にする UseMatrix = 1 ; // 現在のタイムカウントを記録しておく Time = GetNowCount() ; // 何かキーが押されるまでループ while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { // 画面をクリア ClearDrawScreen() ; // 1秒経つ毎に独自の行列を使用するかどうかを変更する if( GetNowCount() - Time > 1000 ) { // フラグによって処理を分岐 if( UseMatrix == 1 ) { // 2番目のフレームに下に動くのローカル行列をセットする MV1SetFrameUserLocalMatrix( ModelHandle, 2, MGetTranslate( VGet( 0.0f, -300.0f, 0.0f ) ) ) ; // フラグを0にする UseMatrix = 0 ; } else { // 2番目のフレームに設定した行列を無効化する MV1ResetFrameUserLocalMatrix( ModelHandle, 2 ) ; // フラグを1にする UseMatrix = 1 ; } // 現在のタイムカウントを記録しておく Time = GetNowCount() ; } // モデルを描画 MV1DrawModel( ModelHandle ) ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1SetFrameVisible( int MHandle, int FrameIndex, int VisibleFlag ) ;

概略フレームの表示・非表示状態を変更する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
int VisibleFlag : 表示状態( TRUE:表示 FALSE:非表示 )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの表示状態を変更します。

 VisibleFlag に FALSE を渡すと、指定のフレームが持つメッシュ、及び指定のフレームの子フレームが持つメッシュと子フレームの子フレームが持つメッシュも描画されなくなります。

サンプル

  モデルファイル SimpleModel.mqo に含まれる1番目のフレームの表示状態を「非表示」にして描画します。
 「円柱」フレームの子フレームである「子円柱」も一緒に表示されなくなります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ; // 1番のフレームの表示状態を「非表示」にする MV1SetFrameVisible( ModelHandle, 1, FALSE ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetFrameVisible( int MHandle, int FrameIndex ) ;

概略フレームの表示・非表示状態を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値0以上:フレームの表示状態( TRUE:表示 FALSE:非表示 )
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルに含まれるフレームの表示状態を取得します。

 親フレームの表示状態が仮に「非表示」になっていても、この関数はあくまで指定のフレームに設定されている表示状態を返します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言int MV1SetFrameDifColorScale( int MHandle, int FrameIndex, COLOR_F Scale ) ;

概略フレームのディフューズカラーのスケール値を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
COLOR_F Scale : スケール値( 各色 0.0f ~ 1.0f )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのディフューズカラーに対するスケーリングの値を設定します。

 モデル中の一部分だけ色を変えたい場合などに使用します。

サンプル

  モデルファイル SimpleModel.mqo に含まれる3番目のフレームのディフューズカラーを赤にします。
 「立方体」フレームの子フレームである「子立方体」も一緒に赤色になります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ; // 3番のフレームのディフューズカラーを赤にする MV1SetFrameDifColorScale( ModelHandle, 3, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言COLOR_F MV1GetFrameDifColorScale( int MHandle, int FrameIndex ) ;

概略フレームのディフューズカラーのスケール値を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのディフューズカラーのスケール値

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのディフューズカラーに対するスケーリングの値を取得します。

 スケーリングの影響は子フレームにも及びますが、この関数は指定のフレームに対して MV1SetFrameDifColorScale 関数で設定された値をそのまま返します。

サンプル

ありません



宣言int MV1SetFrameSpcColorScale( int MHandle, int FrameIndex, COLOR_F Scale ) ;

概略フレームのスペキュラカラーのスケール値を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
COLOR_F Scale : スケール値( 各色 0.0f ~ 1.0f )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのスペキュラカラーに対するスケーリングの値を設定します。

 モデル中の一部分だけ色を変えたい場合などに使用します。

サンプル

  モデルファイル SimpleModel.mqo に含まれる1番目のフレームのスペキュラカラーを黄色にします。
 「円柱」フレームの子フレームである「子円柱」も一緒に黄色になります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ; // 1番のフレームのスペキュラカラーを黄色にする MV1SetFrameSpcColorScale( ModelHandle, 1, GetColorF( 1.0f, 1.0f, 0.0f, 1.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言COLOR_F MV1GetFrameSpcColorScale( int MHandle, int FrameIndex ) ;

概略フレームのスペキュラカラーのスケール値を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのスペキュラカラーのスケール値

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのスペキュラカラーに対するスケーリングの値を取得します。

 スケーリングの影響は子フレームにも及びますが、この関数は指定のフレームに対して MV1SetFrameSpcColorScale 関数で設定された値をそのまま返します。

サンプル

ありません



宣言int MV1SetFrameEmiColorScale( int MHandle, int FrameIndex, COLOR_F Scale ) ;

概略フレームのエミッシブカラーのスケール値を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
COLOR_F Scale : スケール値( 各色 0.0f ~ 1.0f )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのエミッシブカラーに対するスケーリングの値を設定します。

 モデル中の一部分だけ色を変えたい場合などに使用します。

サンプル

  モデルファイル SimpleModel.mqo に含まれる1番目のフレームのエミッシブカラーを水色にします。
 「円柱」フレームの子フレームである「子円柱」も一緒に水色になります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ; // 1番のフレームのエミッシブカラーのスケール値を水色にする MV1SetFrameEmiColorScale( ModelHandle, 1, GetColorF( 0.0f, 1.0f, 1.0f, 0.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言COLOR_F MV1GetFrameEmiColorScale( int MHandle, int FrameIndex ) ;

概略フレームのエミッシブカラーのスケール値を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのエミッシブカラーのスケール値

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのエミッシブカラーに対するスケーリングの値を取得します。

 スケーリングの影響は子フレームにも及びますが、この関数は指定のフレームに対して MV1SetFrameEmiColorScale 関数で設定された値をそのまま返します。

サンプル

ありません



宣言int MV1SetFrameAmbColorScale( int MHandle, int FrameIndex, COLOR_F Scale ) ;

概略フレームのアンビエントカラーのスケール値を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
COLOR_F Scale : スケール値( 各色 0.0f ~ 1.0f )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのアンビエントカラーに対するスケーリングの値を設定します。

 モデル中の一部分だけ色を変えたい場合などに使用します。

サンプル

  モデルファイル SimpleModel.mqo に含まれる1番目のフレームのアンビエントカラーを紫色にします。
 「円柱」フレームの子フレームである「子円柱」も一緒に水色になります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ; // 1番のフレームのアンビエントカラーのスケール値を紫色にする MV1SetFrameAmbColorScale( ModelHandle, 1, GetColorF( 1.0f, 0.0f, 1.0f, 0.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言COLOR_F MV1GetFrameAmbColorScale( int MHandle, int FrameIndex ) ;

概略フレームのアンビエントカラーのスケール値を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームのアンビエントカラーのスケール値

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュを描画する際に行うマテリアルのアンビエントカラーに対するスケーリングの値を取得します。

 スケーリングの影響は子フレームにも及びますが、この関数は指定のフレームに対して MV1SetFrameAmbColorScale 関数で設定された値をそのまま返します。

サンプル

ありません



宣言int MV1GetFrameSemiTransState( int MHandle, int FrameIndex ) ;

概略フレームに半透明要素があるかどうかを取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値TRUE:半透明要素がある FALSE:半透明要素は無い
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに半透明の要素があるかどうかを取得します。

 例えば、フレーム内のメッシュが使用しているマテリアルのテクスチャに半透明の部分があったり、 指定のフレームや子フレームの何れかの不透明が 1.0f ではなかったりすると TRUE が返ってきます。

 半透明要素を持つフレーム同士をZソートする場合に、各フレームに半透明要素があるかどうかを判定する際などに使用します。

サンプル

  モデルファイル SimpleModel.mqo の3番目のフレームの不透明度を上下キーで操作できるようにした上で、 画面上に MV1GetFrameSemiTransState 関数の戻り値を表示して半透明要素があるかどうかを確認できるようにしています。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; float OpacityRate ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 100.0f, 600.0f ) ) ; // 不透明度を初期化 OpacityRate = 1.0f ; // ESCキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面のクリア ClearDrawScreen() ; // 上キーが押されたら不透明度を上げる if( CheckHitKey( KEY_INPUT_UP ) ) { OpacityRate += 0.05f ; if( OpacityRate > 1.0f ) { OpacityRate = 1.0f ; } } // 下キーが押されたら不透明度を下げる if( CheckHitKey( KEY_INPUT_DOWN ) ) { OpacityRate -= 0.05f ; if( OpacityRate < 0.0f ) { OpacityRate = 0.0f ; } } // 3番目のフレームの不透明度を設定する MV1SetFrameOpacityRate( ModelHandle, 3, OpacityRate ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // 現在の3番目のフレームの不透明度と、MV1GetFrameOpacityState の戻り値を描画する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "ESC Key:Exit OpacityRate:%f SemiTransState:%d", OpacityRate, MV1GetFrameSemiTransState( ModelHandle, 3 ) ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1SetFrameOpacityRate( int MHandle, int FrameIndex, float Rate ) ;

概略フレームの不透明度を設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
float Rate : 不透明度( 0.0f ~ 1.0f )
戻り値 0:成功
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームの不透明度を設定します。

 Rate の値が 0.0f に近いほど不透明度が下がり( 透明度が上がり )、 1.0f に近いほど不透明度が上がり( 透明度が下がり )ます。
 指定のフレームの子フレームにも影響を与えます。

 モデルの一部のフレームを半透明で表示したかったり、だんだん透明になって消えていくなどの演出をしたい場合に使用します。

サンプル

  モデルファイル SimpleModel.mqo の1番目のフレームの不透明度を50%にして描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 透明で描画されているということが分かるように画面全体を赤で塗りつぶす DrawBox( 0, 0, 640, 480, GetColor( 255,0,0 ), TRUE ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 100.0f, 600.0f ) ) ; // 3Dモデルの1番目のフレームの不透明度を50%にする MV1SetFrameOpacityRate( ModelHandle, 1, 0.5f ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言float MV1GetFrameOpacityRate( int MHandle, int FrameIndex ) ;

概略フレームの不透明度を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値フレームに設定されている不透明度

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに設定されている不透明度を取得します。
 MV1SetFrameOpacityRate でセットした値を取得するだけの関数です。

サンプル

ありません



宣言int MV1SetFrameTextureAddressTransform( int MHandle, int FrameIndex, float TransU, float TransV, float ScaleU, float ScaleV, float RotCenterU, float RotCenterV, float Rotate ) ;

概略フレームのテクスチャ座標変換パラメータを設定する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
float TransU : テクスチャ座標のU値に加算する値( 初期値 0.0f )
float TransV : テクスチャ座標のV値に加算する値( 初期値 0.0f )
float ScaleU : テクスチャ座標のU値に掛ける値( 初期値 1.0f )
float ScaleV : テクスチャ座標のV値に掛ける値( 初期値 1.0f )
float RotCenterU : テクスチャ座標の回転中心となるU値( 初期値 0.0f )
float RotCenterV : テクスチャ座標の回転中心となるV値( 初期値 0.0f )
float Rotate : テクスチャ座標の回転値( 単位はラジアン )( 初期値 0.0f )
戻り値 0:成功
 -1:エラー発生

解説  メッシュのテクスチャ座標に対して行う変換処理のパラメータを設定します。

 用途としては、例えばキャラクターの顔のテクスチャに複数の表情を予め描いておいて、 表情を変えたいタイミングでその表情が描かれているテクスチャ座標に TransU と TransV の引数を使用してメッシュに含まれる頂点のテクスチャ座標をスライドさせて描画される表情を変更する、などがあります。

尚、各引数の意味は上記の注釈の通りですが、パラメータによる演算が行われる順序は

1.RotCenterU, RotCenterV, Rotate による座標値の回転
2.TransU, TransV を座標値に加算
3.ScaleU, ScaleV による座標値の拡大

となります。
この関数による設定をリセットしたい場合は MV1ResetFrameTextureAddressTransform を使用してください。

サンプル

  モデルファイル TexAddrTransfTest.mqo を約1秒毎にテクスチャ座標をずらしてアニメーションさせます。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; int WaitCounter, ViewPattern ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "TexAddrTransfTest.mqo" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ; // 描画するパターンと、描画パターンを変更する間隔をカウントする変数の初期化 ViewPattern = 0 ; WaitCounter = 0 ; // ESCキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面をクリア ClearDrawScreen() ; // 描画するパターンを変更する処理 WaitCounter ++ ; if( WaitCounter == 60 ) { WaitCounter = 0 ; // 60フレーム経過したら描画パターンを変更 ViewPattern ++ ; if( ViewPattern == 4 ) { ViewPattern = 0 ; } } // 描画するパターンに応じてテクスチャ座標のU値をずらす値を変更 MV1SetFrameTextureAddressTransform( ModelHandle, 0, 0.25f * ViewPattern, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f ) ; // モデルの描画 MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1ResetFrameTextureAddressTransform( int MHandle, int FrameIndex ) ;

概略フレームのテクスチャ座標変換パラメータをリセットする

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値 0:成功
 -1:エラー発生

解説  関数 MV1SetFrameTextureAddressTransform で設定したテクスチャ座標変換パラメータを初期値にリセットします。 効果的には MV1SetFrameTextureAddressTransform 関数の引数を注釈に「初期値」として記載されている値を渡して呼んだ場合と同じです。

サンプル

ありません



宣言int MV1GetFrameTriangleNum( int MHandle, int FrameIndex ) ;

概略フレームに含まれるポリゴンの数を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値0以上:三角形ポリゴンの数
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれる三角形ポリゴンの数を取得します。

サンプル

 MV1GetFrameNum関数 のサンプルを参照してください。



宣言int MV1GetFrameMeshNum( int MHandle, int FrameIndex ) ;

概略フレームが持つメッシュの数を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
戻り値0以上:フレームに含まれるメッシュの数
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュの数を取得します。

 この関数の戻り値には、子フレームが持つメッシュの数は含まれません。

サンプル

  モデルファイル DxChara.x の1番目のフレームに含まれるメッシュの情報を表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, MeshNum, i, MeshIndex ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 1番目のフレームに含まれるメッシュの数を取得する MeshNum = MV1GetFrameMeshNum( ModelHandle, 1 ) ; // メッシュの数だけループ for( i = 0 ; i < MeshNum ; i ++ ) { // メッシュ番号の取得 MeshIndex = MV1GetFrameMesh( ModelHandle, 1, i ) ; // メッシュが使用しているマテリアルとメッシュに含まれる三角形ポリゴンの数を描画 DrawFormatString( 0, i * 16, GetColor( 255,255,255 ), "Mesh No %d Material %d Triangle Polygon Num %d", i, MV1GetMeshMaterial( ModelHandle, MeshIndex ), MV1GetMeshTriangleNum( ModelHandle, MeshIndex ) ) ; } // モデルハンドルの削除 MV1DeleteModel( ModelHandle ) ; // キーの入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int MV1GetFrameMesh( int MHandle, int FrameIndex, int Index ) ;

概略フレームの表示・非表示状態を取得する

引数 int MHandle : モデルのハンドル
int FrameIndex : フレームの番号
int Index : フレーム内メッシュの番号
戻り値0以上:メッシュの番号
 -1:エラー発生

解説  MHandle のモデルハンドルが示すモデルの指定のフレームに含まれるメッシュの番号を取得します。

 Index に MV1GetFrameMeshNum 関数の戻り値以上の値を渡すとエラーになります。

 取得したメッシュ番号は MV1GetMeshMaterial などのメッシュ番号を必要とする関数で使用します。

サンプル

 MV1GetFrameMeshNum関数 のサンプルを参照してください。




戻る