3D背景を作ってみよう.3について

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

3D背景を作ってみよう.3について

#1

投稿記事 by 迷える羊 » 16年前

いつもお世話になっております.

今回3D背景に構造体,ポインタを使わずにクラスだけで挑戦してみました.
3D背景を作ってみよう.3では,「手前にあるものを描いた後で、奥にあるものを書いてしまうとおかしなことになってしまいます。そこで常にZでソートする必要があります。」とあるのですが,Zでソートするというのはどういう仕組みなのかはっきりと理解できないでいます.
また,SwapObChild関数では構造体とポインタを使わない場合,何を入れ替えればよいのか分からないです.ソートの仕組みが分かっていないので,入れ替えるものも分からないですかね...
構造体とポインタを使わない場合は多数の変数を入れ替える必要があるのは覚悟しています.
入れ替える必要のある変数を明示していただければ幸いです.

void SwapObChild(ObChild_t *Ob1,ObChild_t *Ob2){
ObChild_t t = *Ob1;
*Ob1 = *Ob2;
*Ob2 = t;
}

void SortObject(){
int i,j,t;
for(t=0; t<ObjectNum; t++){
for (i = 0; i < Object[t].ObchindMax ; i++) {
for (j = i + 1; j < Object[t].ObchindMax ; j++) {
if ( Object[t].ObChild.z < Object[t].ObChild[j].z ) {
SwapObChild( &Object[t].ObChild, &Object[t].ObChild[j] );
}
}
}
}
}


もう一つは,

DrawPolygon3D( Object[t].ObChild.Vertex, 2, Object[t].Img, TRUE ) ;

ですが,やはりこの一番目の引数には必ず

struct VERTEX_3D
{
  VECTOR pos ;
  unsigned char b, g, r, a ;
  float u, v ;
} ;

struct VECTOR
{
  float x, y, z ;
} ;

という構造体を使用しなければなりませんか?

ねこ

Re:3D背景を作ってみよう.3について

#2

投稿記事 by ねこ » 16年前

<Zでソートするというのはどういう仕組みなのかはっきりと理解できないでいます.
例えばX座標で考えると「20,30,0,10」という座標を持つオブジェクトが4つあります。これを左にある順に表示します。
と考えると「0,10,20,30」に並び変えて表示するというのは分かりますよね?
これをZ軸でやっています。

<入れ替え
Object変数は確かグローバルだったのでこういう指定もできますよ。
void SwapObChild( int obj_idx, int idx1, int idx2 ) { 
	ObChild_t t = Object[ obj_idx ].ObChild[ idx1 ];
	Object[ obj_idx ].ObChild[ idx1 ] = Object[ obj_idx ].ObChild[ idx2 ]; 
	Object[ obj_idx ].ObChild[ idx2 ] = t; 
}
呼び出し側:SwapObChild( t, i, j );

<DrawPolygon3D
DrawPolygon3D関数を呼ぶ関数を別途用意してそこでVERTEX_3Dデータ作成するという手法はあると思います。

迷える羊

Re:3D背景を作ってみよう.3について

#3

投稿記事 by 迷える羊 » 16年前

さっそくの返信ありがとうございます.
お教えいただいた方法をもとに挑戦してみます.

迷える羊

Re:3D背景を作ってみよう.3について

#4

投稿記事 by 迷える羊 » 16年前

うまく表現することができました.
お助けいただき感謝しています.

閉鎖

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