3Dモデルを動かす際に

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
resesh

3Dモデルを動かす際に

#1

投稿記事 by resesh » 14年前

どうも初めまして、プログラム初心者な者です。

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

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 14年前

はじめまして。
ソースコードを見せていただくと早いかと思います。
勘だと画面をクリアしていないのでは?と思いますが。
ソースコードを貼る場合はcodeタグをご利用ください。 詳しくはフォーラムルールを御覧ください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

resesh

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

#3

投稿記事 by resesh » 14年前

コード:

//モデル操作-------------------------------------------------------------------------------------------
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関数の位置を色々いじってもみましたが逆にカメラの処理も無効になったりと、今の所解決の糸口が見えないでいます。

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 14年前

MV1DrawModelがPlayer_Process()とRender_Process()の両方に有りますが、これは2重描画になる間違いです。
Render_Process()だけに有るべきです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

resesh

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

#5

投稿記事 by resesh » 14年前

おっ、おっと・・・

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

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

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

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る