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などを描画する前に必ず解除する)
}