ページ 1 / 1
DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 17:02
by こぶ茶
はじめまして。お世話になります。現在DXライブラリを用いて3Dゲームを作成しています。
キャラクターがダメージを受けた際にそのキャラクターを白く点滅させることで無敵状態を表現したいと思い
MV1SetMeshDifColorScale関数を用いてキャラクターのディフューズカラーを白くし、
周期的に透過をいじることでそれを表現することにしたのですが
無敵状態が終わったあとにキャラクターのディフューズカラーをもとに戻す方法がわからず困っています。
どなたかよろしくお願いいたします。
Re: DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 19:20
by h2so5
変更前のディフューズカラーのスケール値を記憶しておいて、
その数値に戻すという手があると思います。
Re: DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 20:37
by こぶ茶
回答ありがとうございます。
おっしゃる通りにすればうまくいきそうと思い、
試したのですが、3Dモデルがなぜか崩れてしまい
モデル自体も少し黒っぽくなってしまいました。
テスト用に以下のようにしたのですが…
#include"DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
int MeshNum,ModelHandle;
COLOR_F ColorF[64];
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel("chara.pmd" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 230.0f, -370.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// モデルに含まれるメッシュの数を取得する
MeshNum = MV1GetMeshNum( ModelHandle ) ;
//ディフューズカラーを取得する
for( int i=0;i<MeshNum;i++){
ColorF=MV1GetMaterialDifColor(ModelHandle,i) ;
}
//キャラクターのディフューズカラーを白く設定する
for( int i=0;i<MeshNum;i++){
MV1SetMeshDifColorScale(ModelHandle, i, GetColorF( 255.0f, 255.0f, 255.0f, 0.50f ) ) ;
}
//メッシュの数を確認する
DrawFormatString(0,0,GetColor(0,255,255),"MeshNum:%d",MeshNum);
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
//元のディフューズカラーを設定する
for( int i=0;i<MeshNum;i++){
MV1SetMeshDifColorScale(ModelHandle, i, ColorF) ;
}
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
//キーの入力待ち
WaitKey();
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
Re: DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 20:43
by こぶ茶
すいません。フォーラムルールを見逃してました。
訂正させてください。
コード:
#include"DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
int MeshNum,ModelHandle;
COLOR_F ColorF[64];
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel("chara.pmd" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 230.0f, -370.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// モデルに含まれるメッシュの数を取得する
MeshNum = MV1GetMeshNum( ModelHandle ) ;
//ディフューズカラーを取得する
for( int i=0;i<MeshNum;i++){
ColorF[i]=MV1GetMaterialDifColor(ModelHandle,i) ;
}
//キャラクターのディフューズカラーを白く設定する
for( int i=0;i<MeshNum;i++){
MV1SetMeshDifColorScale(ModelHandle, i, GetColorF( 255.0f, 255.0f, 255.0f, 0.50f ) ) ;
}
//メッシュの数を確認する
DrawFormatString(0,0,GetColor(0,255,255),"MeshNum:%d",MeshNum);
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
//元のディフューズカラーを設定する
for( int i=0;i<MeshNum;i++){
MV1SetMeshDifColorScale(ModelHandle, i, ColorF[i]) ;
}
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
//キーの入力待ち
WaitKey();
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
Re: DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 22:00
by h2so5
こぶ茶 さんが書きました:回答ありがとうございます。
おっしゃる通りにすればうまくいきそうと思い、
試したのですが、3Dモデルがなぜか崩れてしまい
モデル自体も少し黒っぽくなってしまいました。
ClearDrawScreenをせずに同じ3D座標に連続で描画しているからです。
画面をクリアしてから描画しないと、Zバッファの関係で正常に描画されません。
モデル全体のディフューズカラーを設定するならMV1SetDifColorScaleのほうが簡単です。
Re: DXライブラリのディフューズカラーについて
Posted: 2011年3月27日(日) 22:18
by こぶ茶
h2so5 さんが書きました:
ClearDrawScreenをせずに同じ3D座標に連続で描画しているからです。
画面をクリアしてから描画しないと、Zバッファの関係で正常に描画されません。
モデル全体のディフューズカラーを設定するならMV1SetDifColorScaleのほうが簡単です。
ClearDrawScreenの入れ忘れのご指摘ありがとうございます。これを入れても変わらなかったのですが
MV1SetDifColorScale関数を用いたものに変更したところうまくいきました。
h2so5様、ありがとうございました。