ページ 11

3Dモデルを動かす際に

Posted: 2011年5月25日(水) 10:51
by resesh
どうも初めまして、プログラム初心者な者です。

今、DXライブラリで3Dモデルを表示し、そのモデルを動かすという初歩的なプログラムを組んでいますが、

何故かモデルを動かした際、モデルが2重に映ってしまい、困っています。

おそらく前のフレームのモデルが描写されていて、それが現在の座標のモデルと重なって起きている現象なのだと推理していますが、

本家サイトにはそのような記述が無く、解決方法が分かりません。教えていただけないでしょうか。

Re: 3Dモデルを動かす際に

Posted: 2011年5月25日(水) 10:58
by softya(ソフト屋)
はじめまして。
ソースコードを見せていただくと早いかと思います。
勘だと画面をクリアしていないのでは?と思いますが。
ソースコードを貼る場合はcodeタグをご利用ください。 詳しくはフォーラムルールを御覧ください。

Re: 3Dモデルを動かす際に

Posted: 2011年5月25日(水) 15:16
by resesh

コード:

//モデル操作-------------------------------------------------------------------------------------------
void Player_Process( void )
{
	    //キー入力と動く座標の量の設定
		if(inp.NowInput & PAD_INPUT_DOWN) pl.Position.z -= 5.0f ;  
        if(inp.NowInput & PAD_INPUT_UP) pl.Position.z += 5.0f ;  
		if(inp.NowInput & PAD_INPUT_LEFT) pl.Position.x -= 5.0f ;  
        if(inp.NowInput & PAD_INPUT_RIGHT) pl.Position.x += 5.0f ;  
        //移動と表示  
        MV1SetPosition(pl.ModelHandle, pl.Position ) ;  
        MV1DrawModel(pl.ModelHandle) ;  
      
    }  

// 描画処理-------------------------------------------------------------------------------------------------
void Render_Process( void )
{
	// プレイヤーモデルの描画
	MV1DrawModel( pl.ModelHandle ) ;
}


// WinMain関数----------------------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
	
	ChangeWindowMode(TRUE);	//ウインドウモード
	
	if( DxLib_Init()<0)		// DXライブラリ初期化処理
	{
		return -1 ;			// エラーが起きたら直ちに終了
	}

	// モデルの初期化
	Player_Initialize() ;

	// カメラの初期化
	Camera_Initialize() ;

	//描画先を裏画面
	SetDrawScreen(DX_SCREEN_BACK);

	
	while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0)
	{
		ClearDrawScreen();		//一旦画面クリア

		// 入力処理
		Input_Process() ;

		//モデル処理
		Player_Process() ;

		// カメラの処理
		Camera_Process() ;

		// 描画処理
		Render_Process() ;
		
		//裏画面を表に反映
		ScreenFlip();					
	}

	// モデルの後始末
	Player_Terminate() ;


	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;				// ソフトの終了 
}

上のコードのように、カメラの設定も行っており、モデルを動かすとその方向にカメラを向けるようにしています。

原因となりそうな部分だけ抜き出してみましたがどうでしょうか。本家サイト様のサンプルを切り貼りしているだけですが・・・。

SetDrawScreen関数の位置を色々いじってもみましたが逆にカメラの処理も無効になったりと、今の所解決の糸口が見えないでいます。

よろしくお願いします。

Re: 3Dモデルを動かす際に

Posted: 2011年5月25日(水) 15:22
by softya(ソフト屋)
MV1DrawModelがPlayer_Process()とRender_Process()の両方に有りますが、これは2重描画になる間違いです。
Render_Process()だけに有るべきです。

Re: 3Dモデルを動かす際に

Posted: 2011年5月25日(水) 15:30
by resesh
おっ、おっと・・・

まさかそんな簡単な所を見落としていたとは・・・。

確かに、該当箇所を直してみると正常に動作しました。ありがとうございます。

まだまだ始めたばかりですが、最終的には3Dゲームを作ってみたいと思っているので、

また分からないところがあればお聞きする事もあるかもしれません。

その時はまたお願いしたいです。

丁寧な解説、ありがとうございました!