トップページ > 記事閲覧
シャドウマップが正しく動作しない
名前:TAKU 日時: 2017/01/20 16:34

3Dのアクションゲームを作っているのですが、 MaskScreenを作った後に、 シャドウマップを使用すると影がなくなってしまいます。 これは仕様なのでしょうか?
メンテ

Page: 1 |

Re: シャドウマップが正しく動作しない ( No.1 )
名前:管理人 日時:2017/01/22 12:32

いえ、そのような仕様はありません ためしに以下のような MakeScreen を使用した後にシャドウマップを使用する プログラムを組んでみましたが、正常に影が表示されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int CharaModelHandle ; int ShadowMapHandle ; int Screen ; // ウインドウモードで起動する ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら終了 return -1 ; } // MakeScreen で仮画面を作成する Screen = MakeScreen( 640, 480 ) ; // キャラクターモデルの読み込み CharaModelHandle = MV1LoadModel( "DxChara.x" ) ; // シャドウマップハンドルの作成 ShadowMapHandle = MakeShadowMap( 1024, 1024 ) ; // カメラの位置と向きを設定 SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 800.0f, -800.0f ), VGet( 0.000f, 500.000f, 0.000f ) ); // 描画する奥行き方向の範囲を設定 SetCameraNearFar( 40.000f, 2000.000f ); // ライトの方向を設定 SetLightDirection( VGet( 0.5f, -0.5f, 0.5f ) ); // シャドウマップが想定するライトの方向もセット SetShadowMapLightDirection( ShadowMapHandle, VGet( 0.5f, -0.5f, 0.5f ) ) ; // シャドウマップに描画する範囲を設定 SetShadowMapDrawArea( ShadowMapHandle, VGet( -1000.0f, -1.0f, -1000.0f ), VGet( 1000.0f, 1000.0f, 1000.0f ) ) ; // Zバッファに対する描画を有効にする SetUseZBufferFlag( TRUE ) ; SetWriteZBufferFlag( TRUE ) ; // メインループ while( ProcessMessage() == 0 ) { // 描画先を仮画面に変更 SetDrawScreen( Screen ) ; // 画面をクリア ClearDrawScreen() ; // カメラの位置と向きを設定 SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 800.0f, -800.0f ), VGet( 0.000f, 500.000f, 0.000f ) ); // 描画する奥行き方向の範囲を設定 SetCameraNearFar( 40.000f, 2000.000f ); // シャドウマップへの描画の準備 ShadowMap_DrawSetup( ShadowMapHandle ) ; // シャドウマップへキャラクターモデルの描画 MV1DrawModel( CharaModelHandle ) ; // シャドウマップへの描画を終了 ShadowMap_DrawEnd() ; // 描画に使用するシャドウマップを設定 SetUseShadowMap( 0, ShadowMapHandle ) ; // 足場の描画 DrawCube3D( VGet( -1000.0f, -100.0f, -1000.0f ), VGet( 1000.0f, 0.0f, 1000.0f ), GetColor( 100,200,100 ), GetColor( 0,0,0 ), TRUE ) ; // キャラクターモデルの描画 MV1DrawModel( CharaModelHandle ) ; // 描画に使用するシャドウマップの設定を解除 SetUseShadowMap( 0, -1 ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 仮画面を裏画面に描画する DrawGraph( 0, 0, Screen, FALSE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // シャドウマップの削除 DeleteShadowMap( ShadowMapHandle ) ; // キャラクターモデルの削除 MV1DeleteModel( CharaModelHandle ) ; // 仮画面の削除 DeleteGraph( Screen ) ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければ TAKUさんの環境でも上記のプログラムで正常に影が描画されるか試してみてください m(_ _)m ( 因みに DrawCube3D で描画されるキューブに影が適用されるようになったのは最近の バージョンなので、もし最新版のDXライブラリをお使いではありませんでしたら こちらの暫定最新版のDXライブラリをお使いください https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: シャドウマップが正しく動作しない ( No.2 )
名前:TAKU 日時:2017/01/23 13:12

すいません、説明不足でした。 メイクスクリーンではなくて、 マスクスクリーンです。 エフェクシアを使用するために、 directXのバージョンを9EXにしています。 もう1度の検証をお願い致します。m(_ _)m
メンテ
Re: シャドウマップが正しく動作しない ( No.3 )
名前:管理人 日時:2017/01/24 01:25

すみません、Mask を Make に見間違えていました orz 手元でも CreateMaskScreen(); や SetUseMaskScreenFlag( TRUE ); を実行した後で シャドウマップを使用しようとすると正常に描画されない現象を確認しました 内部のプログラムを見てみたところ、マスクの処理で行うべきシャドウマップ関連の処理が 何も行われていませんでした… CreateMaskScreen(); などを実行した状態でも正常にシャドウマップが動作するように 修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: シャドウマップが正しく動作しない ( No.4 )
名前:TAKU(解決) 日時:2017/01/24 23:00

シャドウマップが正常にできました! ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存