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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Aozora0630
記事: 85
登録日時: 9年前
住所: 日本
連絡を取る:

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

#1

投稿記事 by Aozora0630 » 9年前

今回作っている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ゲームでのチップ式マップ描画の方法を教えてください。
よろしくお願いします。

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

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

#2

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

ポリゴン面を3次元空間にちゃんと配置して、Zバッファの設定も含めカメラ・パラメータが正しければ正しく描画されるはずです。
提示されているコードだけだと2Dのデータにすぎないので、これをうまく3Dデータに落とし込めているか判断できません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Aozora0630
記事: 85
登録日時: 9年前
住所: 日本
連絡を取る:

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

#3

投稿記事 by Aozora0630 » 9年前

え、そうなんですか。

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

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

閉鎖

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