3Dで、奥にあるはずのモノが手前に描画される

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

3Dで、奥にあるはずのモノが手前に描画される

#1

投稿記事 by sn » 13年前

こんばんわ。

3D空間での描画処理において、視点に近いオブジェクトは、遠くのオブジェクトよりも優先されて描画されるものと思いますが、
先ほど作ったプログラムでは、どういうわけかそれが逆転して、遠くのオブジェクトが優先して(画面手前側に)表示されます。
(大きい画像の上に、小さい画像が次々と乗っかっているような状態で表示されます。)

コードが煩雑になってしまったので一部掲載となりますが、大まかには以下のような処理を行なっています。
画面正面を向いた画像が、depthの回数だけZ軸奥方向に次々と表示されていくようなものです。

コード:

void Test(){
	//カメラポジション
	SetCameraPositionAndAngle(VGet(0,0,0), 0,0,0) ;	

	//描画(テクスチャの枚数分ループ)
	for(int depth = 0; depth < 5; depth++){
		//テクスチャの位置と向きの計算
		CalcObject(depth);
		//テクスチャ1枚分を描画
		DrawPolygon3D( Object[0].Vertex, 2, Object[0].Img, TRUE );
	}
}

void CalcObject(int depth){
	for(int i=0;i<6;i++){
		Object[0].Vertex[i].pos.x = Object[0].x + Object[0].LargeX * VtPm[i].x ;    
		Object[0].Vertex[i].pos.y = Object[0].y + Object[0].LargeY * VtPm[i].y ;
		Object[0].Vertex[i].pos.z = Object[0].z ;
	}
	//テクスチャの中心座標設定
	Object[0].x			= 0;
	Object[0].y			= 0;
	Object[0].z			= 600 + 800 * depth;
}
奥の画像が画面手前に表示されてしまう原因がイマイチわかりません。
下例のように、画面奥から画像を表示させるようとしても改善されませんでした。

コード:

void Test(){
	//カメラポジション
	SetCameraPositionAndAngle(VGet(0,0,0), 0,0,0) ;	

	//描画(テクスチャの枚数分ループ)
	for(int depth = 4; depth >= 0; depth--){
		//テクスチャの位置と向きの計算
		CalcObject(depth);
		//テクスチャ1枚分を描画
		DrawPolygon3D( Object[0].Vertex, 2, Object[0].Img, TRUE );
	}
}
分かる方いらっしゃいましたら、よろしくお願いします。

アバター
nullptr
記事: 239
登録日時: 14年前

Re: 3Dで、奥にあるはずのモノが手前に描画される

#2

投稿記事 by nullptr » 13年前

コード読んでませんが、まずZバッファをオンにしていますか?
そして、問題のあるテクスチャに半透明要素はありませんか?
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

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

Re: 3Dで、奥にあるはずのモノが手前に描画される

#3

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

出来れば簡単に再現できるコンパクトなコードを掲載して頂けると助かるのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

sn
記事: 5
登録日時: 13年前

Re: 3Dで、奥にあるはずのモノが手前に描画される

#4

投稿記事 by sn » 13年前

バッファはOFFです。半透明要素もあります。

質問しておいてすみませんが、もう少し自分で考えてみます。
いよいよ根が尽きたら実行可能コード載せてみますので、その時はよろしくお願いします。

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

Re: 3Dで、奥にあるはずのモノが手前に描画される

#5

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

sn さんが書きました:バッファはOFFです。半透明要素もあります。

質問しておいてすみませんが、もう少し自分で考えてみます。
いよいよ根が尽きたら実行可能コード載せてみますので、その時はよろしくお願いします。
ZバッファがOFFな場合は、自分でZ管理しなくてはいけません。
つまり奥のものから先に描画されるように自分で描画順番を制御する必要があります。
これらのために必要な処理を俗にZソートといいます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

sn
記事: 5
登録日時: 13年前

Re: 3Dで、奥にあるはずのモノが手前に描画される

#6

投稿記事 by sn » 13年前

そうだったんですか!全然知りませんでした。なるほど・・・。
アドバイス参考にしてもう一度作りなおしてみます。
ありがとうございました。

閉鎖

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