Mac用プロットライブラリ-24「重なりチェック」 [考え中 - プロットライブラリ]
QTKit Captureのお勉強でしばらくお休みしていた3次元プロットでの隠面陰線消去について考えている。結構、いやすっかり忘れてるのでもう一度おさらいすると
- 3次元オブジェクトに射影変換を行って2次元に変換する。そのとき奥行き方向の値も保持する
- 奥行き方向の値に従って並べ替える
- 遠いオブジェクトから描画して近くのオブジェクトはそれを上描きする
前回まで、奥行きに従って並べ替えるときの問題を考えていた。オブジェクトは半順序集合になって普通のソートアルゴリズムでは対応できないことがわかった。そこで半順序集合を非循環有向グラフとして表現してそれを再帰的に取り出すことで並べ替えをすることにした。
つぎに、今回からオブジェクトの前後関係をどうやって調べるか、という問題を考える。すなわち、頂点しか座標値を持っていないオブジェクトの前後関係をどうやって比較するかという問題になる。オブジェクトの間に重なりがなければ順序を考える必要はない。
Mac用プロットライブラリ-23「隠面消去特有の問題と非循環有向グラフ」 [考え中 - プロットライブラリ]
3次元プロットのための隠面消去をいかに実装するか、と言う問題をしばらく考えている。前後関係をハッセ図に描ければ、Z-Sort法(奥にあるオブジェクトから描いて手前のオブジェクトを上描きしていく)で隠面消去が可能になるのでその方針で考えている。
わざわざ半順序集合だのハッセ図だの持ち出して、無理矢理難しい話にするつもりなわけではない。しかし、数学に現れる概念と同じに見なせるものがあれば、その周辺のいろいろな定理や特徴をそのまま流用することができる。非常に便利なのでちょっと行き詰まると数学の、特に代数と数論まわりで似たものがないか探すのが癖になっている。似ているだけで役に立たないこともあるけど、単に名前を流用するだけでも(名前をつけるのは大切なのに、なんとつけるかはいつも困るので)有益と言える。
ところがそこのちょっとした問題が...さて困った。
Mac用プロットライブラリ-22「隠面消去と半順序集合」 [考え中 - プロットライブラリ]
Mac用プロットライブラリ-21「隠面消去の問題」 [考え中 - プロットライブラリ]
Mac用プロットライブラリ-20「隠面消去」 [考え中 - プロットライブラリ]
Mac用プロットライブラリ-19「Normalized座標と射影変換」 [考え中 - プロットライブラリ]
昨日からプロットライブラリの3次元プロットの問題を整理し始めた。特に3次元プロットではMathematicaと動作を似せようとしたときに意識する必要のあるところを整理していく。次は3次元プロットでの座標の規格化と射影変換について。
Mac用プロットライブラリ-18「3次元プロットの問題点整理」 [考え中 - プロットライブラリ]
前にも書いたように3次元グラフは
- 2次元と同様にAutomaticオプションを展開して3次元のPrimitiveの集合に変換する
- 3次元のNormalized座標に変換する
- 射影変換を行い、2次元のPrimitiveの集合に変換する
- それを2次元PrimitiveレイヤとしてViewレイヤまで展開し描画する
- 隠面処理
- 疑似照明の処理
- 2次元Primitveの3次元上の平面への貼付け
もう少し詳細を整理する。
Mac用プロットライブラリ-17「何をやっていたか思い出す」 [考え中 - プロットライブラリ]
ずいぶん前にたどり着いた、プロットライブラリでのはみ出し問題の解決法としての線形計画法のお勉強の続き。しばらくほったらかしにしていたので何をやっているのか忘れてしまった。がんばって思い出す。何を隠そう実は、「思い出す」ことは一番苦手な精神作業である。その逆は得意だけど。「思い出す」の逆って「忘れる」ではなくて「覚えない」なのか?ああ、書いててわからなくなる...