DXライブラリ

【DXライブラリ】SetDrawScreenで3Dがうまく表示されない

更新日:

グラフィックハンドルを用いて描画を行いたいという場合があるかもしれないのですが、その際3次元が描画されないというバグ?があったので書いておきます。

まずSetDrawScreenを用いるとカメラ関係が一度リセットされてしまうようで、使う場合はもちろんカメラ関係にも気を使う必要があります。
そうじゃない場合でもなぜか3Dがうまく表示されない場合がありました。

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	int ModelHandle ;
	int Screen ;
	SetMainWindowText( "test" ) ;		//ウィンドウ名
	ChangeWindowMode( TRUE ) ;
	SetWindowSizeChangeEnableFlag( TRUE ) ;
	// DXライブラリの初期化
	if( DxLib_Init() < 0 )
	{
		// エラーが発生したら直ちに終了
		return  -1;
	}
	SetGraphMode( 640,480 , 32 ) ;
	// 3Dモデルの読み込み
	ModelHandle = MV1LoadModel( "model.mqo" ) ;
	// 画面に映る位置に3Dモデルを移動
	MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
	// 描画可能なグラフィックの作成
	Screen = MakeScreen( 640, 480, FALSE ) ;
	//// 画面を初期化
	//ClearDrawScreen() ;//←①
	// 描画先を描画可能がグラフィックに設定
	SetDrawScreen( Screen ) ;
	//// 画面を初期化
	//ClearDrawScreen() ;//←②
	// 3Dモデルの描画
	MV1DrawModel( ModelHandle ) ;
	DrawString(10,10,"TEST",GetColor(255,0,0));
	// 描画先を裏画面に変更
	SetDrawScreen( DX_SCREEN_BACK ) ;
	// 描画可能なグラフィックを描画
	DrawGraph( 0, 0, Screen, FALSE ) ;
	// 裏画面の内容を表画面に反映
	ScreenFlip() ;
	// キーの入力待ち
	WaitKey() ;
	// DXライブラリの後始末
	DxLib_End() ;
	// ソフトの終了
	return 0 ;
}

ちょっと見ずらいかもしれませんが、例えば上のような場合でコメントアウトされているClearDrawScreenが①,②の二つがあると思います。
ここでのほうにClearDrawScreenを書く(①のコメントアウトをはずす)と2Dは描画されるのですが3Dは表示されない場合があります。

その場合はSetDrawScreenの後にClearDrawScreenを書く(②のほうのコメントアウトを外す)とうまく3Dが表示されるようになります。

ただ、おそらく環境によって描画ができる、できないが分かれているのだと思います。①にしてもパソコンによっては描画されました。一方、なぜかグラボを積んでいるパソコンでは①の場合は2D描画のみとなってしまいました。(使用したパソコンのOSは両方win7)

ちょっと原因は明確ではありませんが、同じ症状の方は試してみてください。

Amazonリンク
参考:mementoo.info

-DXライブラリ

Copyright© めめんと , 2021 All Rights Reserved Powered by AFFINGER5.