

2Dモジュール描画順について。





まず、以下のような階層構造を持つ2Dオブジェクトを考える。

アルファベットが若い順に、先に定義されているものとする。



     A	-+- B	-+- E

	 |	 |

	 |	 +- F

	 |	 |

	 |	 +- G

	 |

	 |

	 +- C	-+- H

	 |	 |

	 |	 +- I

	 |	 |

	 |	 +- J

	 |	 |

	 |	 +- K

	 |

	 |

	 +- D	-+- L

		 |

		 +- M

		 |

		 +- N --- O





上記の関係において、全てのオブジェクトに同じプライオリティおよび

同じテクスチャが指定されている場合、描画順は以下のようになる。



	A - D - N - O - M - L - C - K - J - I - H - B - G - F - E



表示優先順位は、この描画順の逆順となる。

また、プライオリティが設定されている場合は、プライオリティ値が高いものが

手前になるが、同じプライオリティであるオブジェクト同士では上記の順序が

保たれる。つまり、プライオリティ値が C と N だけ 1 であり、他のオブジェクトは

0 であるとした場合は、描画順は以下のようになる。





  |<------       プライオリティ0        ----------->|<- プライオリティ 1 ->

  A - D - O - M - L - K - J - I - H - B - G - F - E - N - C





また、テクスチャの設定によっても描画順は異なる。2Dモジュールでは、

各テクスチャの転送回数を最小におさえるように、オブジェクトの描画順を

並べ変える。テクスチャは現在の設定で最大16種の .tri を使うことができる。

実際には以下のような手順で描画順が決定される。





  (1) オブジェクトの転送パケットを、オブジェクトが表示されるチャネル、

      プライオリティの、使用するテクスチャに対応する OT の最後に登録する。



  (2) オブジェクトが子となるオブジェクトを持っていれば、その中で最後に

      作成されたオブジェクトに対して(1) のプロセスに入る。



  (3) オブジェクトに同じ親を持つ兄弟(先に定義されたもの)があれば、その

      オブジェクトを対象として (1) のプロセスに入る。



  (4) 子と兄弟の処理が終ったら、親の処理に返る。



  (5) 全てのオブジェクトについて対応する OT への登録が終ったら、

      各プライオリティの下にある、各テクスチャの OT を連結する。

      テクスチャの無いオブジェクトを格納した OT は、最後に連結される。



  (6) (5) で作成された、各プライオリティの OT を連結し、各チャネルごとに

      一つの長大な OT を作成する。



  (7) 各チャネルにおいて対応する OT を描画する。







つまり、基本となるポイントは以下の5つである。



	[1] 描画チャネルが異なる場合、それらは描画チャネルの表示優先順位に

	    依存する



	[2] 描画チャネルが同じ場合、プライオリティ値の高いものが手前に描画

	    される。つまり、プライオリティ値の低いものから先に描画される。



	[3] 描画チャネル、プライオリティ共に同じ値であれば、使用している

	    テクスチャのテクスチャハンドルが若いものから先に描画される。

	    テクスチャハンドルは概ね先に登録されたもののほうが若いが、

	    開放、登録を繰り返すとこの順位が保証されなくなる。



	    間に開放を挟むことなしに連続して登録されたテクスチャは、登録順に

	    ハンドルが与えられることが保証される。



	    また、テクスチャを持たないオブジェクトは、テクスチャを持つ

	    オブジェクトより手前に描画される。



	[4] チャネル、プライオリティ、テクスチャともに同じ場合は、

	    オブジェクトの登録家系によって順位が決定される。



	    双方のオブジェクトの家系をある段階まで遡ると、同じ親を持つ

	    兄弟にたどりつく場合、その兄弟関係において後から登録されたものが

	    先に描画され、先に登録されたものが手前に表示される。



	    双方のオブジェクトの、いずれかがもう一方の祖先である場合、

	    祖先であるほうが先に描画され、子孫が手前に表示される。





以上。

