いつもお世話になっております.
今回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 ;
} ;
という構造体を使用しなければなりませんか?
3D背景を作ってみよう.3について
Re:3D背景を作ってみよう.3について
<Zでソートするというのはどういう仕組みなのかはっきりと理解できないでいます.
例えばX座標で考えると「20,30,0,10」という座標を持つオブジェクトが4つあります。これを左にある順に表示します。
と考えると「0,10,20,30」に並び変えて表示するというのは分かりますよね?
これをZ軸でやっています。
<入れ替え
Object変数は確かグローバルだったのでこういう指定もできますよ。
<DrawPolygon3D
DrawPolygon3D関数を呼ぶ関数を別途用意してそこでVERTEX_3Dデータ作成するという手法はあると思います。
例えば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データ作成するという手法はあると思います。