トップページ > 記事閲覧
Shadowmapを有効にした際に画面がちらつく
名前:ElisabethS5 日時: 2026/07/04 11:31

Shadowmapに関する処理が異常です。 有効にした際に画面がチラつきます。またゲーム画面の焼き付きがモニターに残ります。 #include "GameScene.h" void GameScene::InitGame(int selectMode) { StartTime = GetNowCount(); switch (selectMode) { case 0: SetHighMode = false; break; case 1: SetHighMode = true; break; } // 選択されたモードに応じて初期化を切り替える if (SetHighMode) { //SetFullSceneAntiAliasingMode(8, 8); // シャドウマップの作成 ShadowMapHandle = MakeShadowMap(2048, 2048); SetShadowMapDrawArea(ShadowMapHandle, VGet(-200.0f, -200.0f, -200.0f), VGet(200.0f, 200.0f, 200.0f)); } else { // 低負荷時はアンチエイリアスの数値を下げる SetFullSceneAntiAliasingMode(4, 4); } player.initPlayer(); camera.initCamera(); field.initField(); villain.initVillain(); SetGlobalAmbientLight(GetColorF(0.5f, 0.5f, 0.5f, 1.0f)); // 2. ライトの向きを設定 VECTOR lightDir = VGet(0.5f, -0.5f, 0.5f); SetLightDirection(lightDir); if (SetHighMode) { SetShadowMapLightDirection(ShadowMapHandle, lightDir); } SetLightDifColor(GetColorF(1.0f, 1.0f, 1.0f, 1.0f)); } void GameScene::UpdateGame() { // ★ループの先頭で現在の時間を記録 StartTime = GetNowCount(); field.updateField(); camera.updateCamera(player.Getpos(),field); player.updatePlayer(camera.GetCameraYaw(), field); villain.updateVillain(); // GetNowCount() はミリ秒単位で時間を取得する関数です /*while (GetNowCount() - StartTime < 16) { Sleep(1); }*/ // ★【修正点2】次のフレームのために、現在の時間を記録(16ミリ秒足していく形が理想) StartTime = GetNowCount(); } void GameScene::DrawGame() { // 3. 影を描画する範囲の設定 // パス1:シャドウマップ(影)の生成 if (SetHighMode) { ShadowMap_DrawSetup(ShadowMapHandle); field.drawField(); player.Draw(); villain.Draw(); ShadowMap_DrawEnd(); SetUseShadowMap(0, ShadowMapHandle); //SetUseShadowMap(0, ShadowMapHandle); } // パス2:実際の画面への描画 // 実際に画面に表示するオブジェクトを描画 field.drawField(); player.Draw(); villain.Draw(); // シャドウマップの適用を解除(UIなどを描画する前に必ず解除する) }
メンテ

Page: 1 |

Re: Shadowmapを有効にした際に画面がちらつく ( No.1 )
名前:管理人 日時:2026/07/05 04:00

手元でテストしてみましたが、特に問題なくShadowmapの処理が行われました お使いのDXライブラリのバージョンは最新の物でしょうか? こちらの暫定最新版のバージョンであれば正常に動作するかもしれませんので、 よろしければこちらのバージョンをお試しになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: Shadowmapを有効にした際に画面がちらつく(解決済み) ( No.2 )
名前:ElisabethS5 日時:2026/07/06 13:32

最新版にDxlibを更新した上で、基本処理を担うWinmain.cppでの初期化コードを弄ったら解決しました。 // プログラムは WinMain から始まります int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     //ゲームの初期設定をDxlib_Init関数を呼び出す前に実行したら解決しました SetUseCharSet(DX_CHARSET_UTF8); ChangeWindowMode(TRUE); SetGraphMode(SCREENWIDTH, SCREENHEIGHT, 32); SetUse3DFlag(TRUE); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } SetDrawScreen(DX_SCREEN_BACK); //SetUseSetDrawScreenSettingReset(FALSE); // 起動時の負荷モード選択処理 int selectMode = -1; // -1: 未選択, 0: 低負荷, 1: 高負荷 ・ ・ ・ (以下略)
メンテ

Page: 1 |

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

   クッキー保存