ページ 11

3Dゲームのマップ描画の順番

Posted: 2015年6月08日(月) 22:20
by Aozora0630
今回作っている3Dゲームで、只のダクトのようなテクスチャ無しの迷路のようなマップをつくり、表示しようとしています。

テクスチャ無しなので2次元の正方形を合わせれば良いだろうと思い、四角形を描画しようとしたのですが、描画順の関係で奥のマップが手前のマップよりも前に描画されてしまっておかしなことになってしまいました。

そこで、以下のように描画順を配列に格納して描画しようと思いました。

P = プレイヤー
06,05,04
07, P,03
00,01,02

(0から描画される

此れを実現させる為に、以下のようなコードを作りました。
(描画されるマップは主人公から5マス半径。)

コード:

struct POS{int x,z;};
「GetPlayerBlockPosition何たら」はプレイヤーのブロック座標を返す関数です。

コード:

	POS DrawNum[121];
	
	POS spos = {Getter_PlayerBlockPositionX()-5,Getter_PlayerBlockPositionZ()-5};//四角の左下を取得
	POS opos = spos;//最初の四角の左下の位置
	int border_max = 10;//四角の枠線の最大個数
	int sq = 0;//四角の走査している場所
	int i = 0;//ループカウンタ
	
	//中央を代入
	DrawNum[120].x = spos.x+5;
	DrawNum[120].z = spos.z+5;
	
	for(i = 0;i<120;i++){
		//枠線の中で進んだマスをえる為に引くときの数。
		int minus_value_x = opos.x+(10-border_max);
		int minus_value_z = opos.z+(10-border_max);
		
		DrawNum[i] = spos;
		
		switch(sq){
		case 0 ://右へ
			if(spos.x-minus_value_x>=border_max){
				sq++;
				i--;
			}else spos.x++;
		break;
		case 1 ://上へ
			if(spos.z-minus_value_z>=border_max){
				sq++;
				i--;
			}else spos.z++;
		break;
		case 2 ://左へ
			if(spos.x-minus_value_x<=0){
				sq++;
				i--;
			}else spos.x--;
		break;
		case 3 ://下へ
			if(spos.z-minus_value_z<=0){
				sq=0;
				border_max--;
				i-=2;
			}else spos.z--;
		break;
		};
	}
DrawNumに描画するマップ座標の順番が入っています。

早速このコードを実行したのですが、最初の方は順調だったのですが、四角を一周したあたりから値がおかしくなってきます。
ゲームのマップ描画に使ってもチェック柄?になってしまいます。

3Dゲームでのチップ式マップ描画の方法を教えてください。
よろしくお願いします。

Re: 3Dゲームのマップ描画の順番

Posted: 2015年6月09日(火) 14:03
by softya(ソフト屋)
ポリゴン面を3次元空間にちゃんと配置して、Zバッファの設定も含めカメラ・パラメータが正しければ正しく描画されるはずです。
提示されているコードだけだと2Dのデータにすぎないので、これをうまく3Dデータに落とし込めているか判断できません。

Re: 3Dゲームのマップ描画の順番

Posted: 2015年6月09日(火) 19:31
by Aozora0630
え、そうなんですか。

http://homepage2.nifty.com/natupaji/DxL ... tml#R14N12
本当ですね。こんなことが出来たんですか・・・・。

すみません、お騒がせしました。