トップページ > 過去ログ > 記事閲覧
フォグ機能とDrawBillboard3Dを同時使用したい
名前:坂本 日時: 2010/03/05 23:48

坂本と申します。DXライブラリ、ものすごく使いやすく分かりやすく、ゲーム制作に重宝しております。 最近になり3Dを使ったゲームの制作を始めたのですが、一つご質問があります。 フォグ機能とDrawBillboard3Dを同時に使うと、DrawBillboard3Dで描画される画像とカメラとの距離に関係なく、 画像の不透明部分が全てSetFogColorで設定した色になってしまいます。 フォグもDrawBillboard3Dもどちらも便利なので両方同時に使用したいのですが、何か解決方法はありますでしょうか。 以下にサンプルを載せておきます。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GrHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 画像の読み込み GrHandle = LoadGraph( "Test1.bmp" ) ; // フォグを有効にする SetFogEnable( TRUE ) ; // フォグの色を黄色にする SetFogColor( 255, 255, 0 ) ; // フォグの開始距離を0、終了距離を1500にする SetFogStartEnd( 0.0f, 1500.0f ) ; // 3D空間上に画像を描画 DrawBillboard3D( VGet( 320.0f, 240.0f, 100.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ; // キー入力待ちをする WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: フォグ機能とDrawBillboard3Dを同時使用したい ( No.1 )
名前:管理人 日時:2010/03/15 23:29

ご報告ありがとうございます 今まで自前で3D座標からスクリーン座標に変換していたのですが、 その場合だとフォグ濃度の計算がされないのか 常にフォグの色が最大になってしまっていたようです Direct3D に「3D座標→スクリーン座標」の変換をさせるようにしてみたら (多分)直りましたので、よろしければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: フォグ機能とDrawBillboard3Dを同時使用したい ( No.2 )
名前:坂本 日時:2010/03/16 01:56

>管理人様 ご対応ありがとうございます! 試してみたところ、ほぼ期待通りの描画になりました。 さらに一点気づいた問題があります。 フォグの開始距離と終了距離、画像の距離のパラメーターを変えて色々試してみたところ、 フォグ開始距離の手前に画像があってもフォグの効果が少し出てしまいます。 私が今回使う上では大きな問題ではないのですが、報告までにサンプルを載せておきます。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GrHandle ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 画像の読み込み GrHandle = LoadGraph( "Test1.bmp" ) ; // フォグを有効にする SetFogEnable( TRUE ) ; // フォグの色を黄色にする SetFogColor( 255, 255, 0 ) ; // フォグの開始距離を600、終了距離を1500にする SetFogStartEnd( 600.0f, 1500.0f ) ; // 3D空間上に画像を描画 DrawBillboard3D( VGet( 480.0f, 240.0f, 1000.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ; DrawBillboard3D( VGet( 320.0f, 240.0f, 500.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ; DrawBillboard3D( VGet( 160.0f, 240.0f, 0.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ; // キー入力待ちをする WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
Re: フォグ機能とDrawBillboard3Dを同時使用したい ( No.3 )
名前:管理人 日時:2010/03/22 01:30

紛らわしくてすいません、お書き込みいただいたサンプルの動作は正常です というのも、フォグの開始距離、終了距離は「カメラからの距離」なのですが、 デフォルトのカメラのZ座標は0.0fではないからです カメラのZ座標が0.0fでしたら直感的で分かりやすいのですが、 設定されている画角で丁度Z座標0.0fの画面左端がX座標の0.0f、 右端が640.0fになるようにするとどうしてもカメラ自体のZ座標は マイナスの値になってしまうんです
Re: フォグ機能とDrawBillboard3Dを同時使用したい ( No.4 )
名前:坂本 日時:2010/03/26 21:23

これはこちらの勉強不足でした。手間を取らせてしまい申し訳ありません。 丁寧なご説明ありがとうございます。おかげで仕組みが理解できました。

Page: 1 |