• ベストアンサー

ポリゴン・奥行きソート法について

CGの原理みたいなものを勉強をしています。 HPをいろいろ探したのですが、わかりやすいページがみあたらなくて、 ここに載せました。 「レンダリング」の隠面消去のところで「奥行きソート法」でつまづきました。 奥行き値を求めて降順、または昇順に並べて、多面体の前後関係を決めるのはわかるのですが・・・。ソートのアルゴリズムもわかるのですが。 本には「データ列をデータのキー項目について並べること」 「データはポリゴンとその奥行き値、キー項目は奥行き値」 とかかれているのですがよくわかりません。 たぶん「ポリゴン」がよくわからないのでイメージがわかないのです。 「ポリゴン」のなにから「奥行き値」が求められるのですか? 「ポリゴン」とはなんですか? 解説またはわかりやすいHPを教えてください。

  • chimu
  • お礼率56% (56/99)

質問者が選んだベストアンサー

  • ベストアンサー
  • PtoP
  • ベストアンサー率27% (24/86)
回答No.2

面を分割していくと、最終的にはいくつかの三角形になるのはわかりますか? (四角形に対角線を1本引くと三角形2つになる) これをサイコロ(立方体)にあてはめると・・・ 1の面の頂点を左上(A)、右上(B),左下(C),右下(D)とします。 1の面はA,B,C と B,C,D の頂点を持つ2つの三角形になります。 6の面の頂点を左上(E)、右上(F),左下(G),右下(H)とします。 6の面はE,F,G と F,G,H の頂点を持つ2つの三角形になります。 他の(2,3,4,5)面はA~Hの頂点のどれか3つを使うと表せます。 以上のことから、サイコロは、8つの頂点と、12の三角形ポリゴンからできることになります。(適当な箱に線を引いたりするとわかりやすいと思います) まだまだ、付き合いますので、追加をどうぞ。

その他の回答 (2)

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.3

>例えば、立方体があって、そのポリゴンはどうやってきまるのですか? デザイナーのポリゴン分割による(笑) 何か勘違いなされているようですが、立方体があってポリゴンが決まるのではなく、ポリゴンがあって立方体が表示される、というのが現状の3Dシステムでは一般的です。 ポリゴンとは多角形を意味していますが、いわゆる「板切れ」です。 リアルタイム3Dシステムではこの「板切れ」をいくつも表示して立体を表示しています。 なので、たとえば直方体、さいころなどでは6つの面がありますので6つの正方形ポリゴンを用いて表示されたりします。 (実際には正方形ポリゴンが使われる事は余りありません。3角形のポリゴンがよく使われます。理由はポリゴンの描画方法に関係しますが、現行の方法では凹面ポリゴンの表示ができない事、また4つ以上の座標点は必ず同一の平面上に存在する事が決まっていないという事等から避けられる事が多いです。データ側でちゃんと保証できるのであれば問題ないんですけどね) >確かに3次元だもん、(x、y、z)座標をもっているんですけど、 >どのx座標とどのy座標とどのz座標のくみあわせで、三角形(ポリゴン)をつくるのかな? 多角形の頂点座標をもつのが一般的です。 なお、普通はポリゴンの表面から適当な頂点を一つ決定し、辺を右回り、または左回りにたどる順で頂点座標をセットで保持する事が一般的かと思います。(面付けができますし、法線を求める場合に便利なので) んでポリゴンの奥行き値ですが、これ、といった求め方はありません。プログラマの裁量で決められます。良くある手法としてはポリゴンの第一頂点のZ値をそのまま採用とか、ポリゴンの頂点全部の平均取って・・・とか色々考えられます。元々Zソート(奥行きソート)法自体が結構いい加減な結果しか出ないためあまりまじめにやっても意味がありません。 というのも射影側から見てZ方向に奥行きを持つポリゴンが2つあり、近いZ値を持つ場合、その前後関係はかなりいいかげんにしか決定できません。 また、「ポリゴン単位でソートし、描画する」という事実からポリゴンを貫通したポリゴンはまともに表示されません(どちらかが手前に表示されます)。 ちゃんとした方法を取るのであればZバッファ等の描画方法を使うのがスジです。(昔ならともかく今ではハードウェアで実装されてないものの方が珍しいですし) で解説ですがDirect3DやOpenGLなど実際に実装されて動いてる3Dシステムの入門書などがよいと思います。 実際に物があるわけですし、いざとなればプログラムを組んで動かす事ができますので。 後はCG検定(名前変わってたかも)の参考書なんかも結構使えるかもしれません。

chimu
質問者

お礼

実はCG検定の本を使って勉強しているのです。 おかげでなんとなくつかむことができました。 本屋で3Dシステムの入門書をみてみようと思います。 それで少し3Dを動かしてみようかな・・・と。 がんばってみます!!

  • PtoP
  • ベストアンサー率27% (24/86)
回答No.1

ポリゴンは多角形という意味です。 CGで扱う場合、主に小さな三角形のポリゴンを組み合わせて、モデルを作ります。 三角形のポリゴンの場合頂点は3つあります。 各頂点毎に(x、y、z)の座標を持ち、空間での位置を表します。 xが横、yが縦、zが奥を表します。 三角形ポリゴンは3頂点あるので、基準になるZは、 1、もっとも値の大きいもの 2、もっとも値の小さいもの 3.3つのzの平均 などから、そのポリゴンの基準となる奥行き値(Z)を求めます。 奥行きソートの場合、このZをキーにしてポリゴンをソートします。 Zの値を基準にして並べるので、「Zソート」とも呼ばれます。 このように、ポリゴンを並べておいて、奥から順に描画していけば、次々手前にくるポリゴンによって上書きされるので、隠面消去ができます。 わかりにくければ、追加を・・・

chimu
質問者

お礼

お返事おそくなりまして。 立方体についてはよくわかりました。 例えば球の場合はどんな三角形のポリゴンを考えるのかな? めちゃくちゃ小さな三角形でかんがえるのかな?

chimu
質問者

補足

空間図形が苦手なので、イメージがわきにくい(T_T) 例えば、立方体があって、そのポリゴンはどうやってきまるのですか? 確かに3次元だもん、(x、y、z)座標をもっているんですけど、 どのx座標とどのy座標とどのz座標のくみあわせで、三角形(ポリゴン)をつくるのかな? お時間ありましたら、説明お願いしますm(_'_)m

関連するQ&A

  • ソートアルゴリズム

    お忙しいところすいません。 先日授業で出された課題がどうしても分からなかったので教えていただきたいと思っています。 どうやってプログラムを作ればよいでしょうか。 問題は、 『N件の乱数データを用意し、昇順(または降順)に並べる。 データ件数、ソート所用時間を表示する。 ソート時間1~100秒で処理できるデータ件数を確認する。 ソートアルゴリズムは2種以上作成すること。』 です。

  • クイックソート

    クイックソートのアルゴリズムの問題で 9 1 8 5 3 4 2 6 7 と上記のようなデータ列を昇順に整列するときに 9 1 8 5 3 4 2 6 7 6 1 8 5 3 4 2 9 7 6 1 2 5 3 4 8 9 7 とここで詰まってしまうんですけどどうしたら昇順に導けますか?

  • VBでのFlexGridのソート方法

    VBでのFlexGridのソート方法でいくつかの列を指定して その列がKeyとして昇順または降順のようなソートは 可能でしょうか?

  • クイックソート

    N個のデータを降順に並び替えるプログラムをクイックソートで書きたいのですがよく分かりません。アルゴリズムの部分をどなたか教えてください。できれば詳しい説明もお願いします。

  • VBAでもsort

    今、FOM出版のVBAの実践編を勉強中です。宜しくお願いします。 その中の「sort」メソッドでどうしても納得できず、前に進めない事があります。 構文:rangeオブジェクト.sort(kye1,order1,key2,order2,key3,order3,header) これは理解できるし、どこも省略せずに記入すればその通りに動くのですが orderは省略でき、省略した場合は昇順に並べ替えられると本には載っているのですが 私の記述はうまくいきません。 なぜ、こうなるのか教えてください。 B3  C3   D3 No.  氏名  住所 という表があり、氏名を昇順に並べようとしています。 構文通りに Range("B3").Sort key1:=Range("C3"), order1:=xlAscending, header:=xlyes とすれば問題なく Range("B3").Sort key1:=Range("C3"), header:=xlyes と記述すると、最初はうまくいきますが もう一度試そうと氏名欄を降順に並べ替え、それから実行すると動きません。 また、No.欄を昇順に並べ替えて実行するとちゃんと動き No.を降順に並べ替えて、氏名欄を昇順で並べ替えを実行すると氏名欄も降順で 並べ替えられてしまいます。 なぜ、こんな安定しない動きをするのかがわかりません。 初歩的な質問で申し訳ないのですが、どうしても気になって先に進めないので どうぞ教えてください。 ちなみに、もう一度試そうとNo.欄を並べ替える時は、エクセルの昇順降順アイコンで 並べ替えています。これが問題なのでしょうか?

  • Excel2007 ソートの仕方

    いつもお世話になります。 Excel2007を現在利用していますが、列に入れた数値データーを降順or昇順に並べかえるのにフィルターを使って逆三角マークが表示されていますが、これでやると項目のあるすべての列に逆三角マークがついてしまいます。 これを任意の部分に逆三角マークをつけて降順昇順のソートを三角マークをクリックする都度に並べ変えるようにできませんでしょうか? お手数おかけしますが、宜しくお願いいたします。

  • Excelのユーザー定義のソート

    あるデータを都道府県別(北から)にソートしたいと思い、北海道~沖縄までをユーザー定義リストにしたのですが、ソートがかかりません。通常の昇順、降順でもないようだし??どなたか教えてください。お願いします。m(__)m

  • ピボットテーブルを複数項目でソートしたい

    ピボットテーブルに展開したデータを、表示している複数の行項目 によりソートすることは可能でしょうか? 行項目として以下が設定されており、  1.科目  2.仕入先  3.購入種類 列項目としては  4.仕入月 データとしては  5.仕入金額 並べ替え変えたい順序としては、 科目毎の年間仕入金額が多い順の購入種類昇順としたいので、 以下のように設定したいのですが、 ピボットテーブル フィールド詳細オプションでは 1項目しかソート順に指定することができません。  1.科目昇順⇒5.合計/仕入金額降順⇒3.購入種類昇順 上記のようなソートを行う方法はありますでしょうか?

  • 【JavaScript配列のソート】2つのキーで

    JavaScriptのsort()を使用して次の並べ替えをしたいと思っています。 key1, key2, data, data 5/5 , 5/4 , リンゴ, 110 5/3 , 5/6 , バナナ, 130 5/7 , 5/2 , ミカン, 110 5/3 , 5/2 , イチゴ, 150 この配列をkey1を昇順でかつkey2も昇順とし並び変えたいのです。 key1, key2, data, data 5/3 , 5/2 , イチゴ, 150 5/3 , 5/6 , バナナ, 130 5/5 , 5/4 , リンゴ, 110 5/7 , 5/2 , ミカン, 110 str.sort(); これだとkey1のみでソートされてしまいますので、条件を複数指定したいのですがいい方法はないでしょうか? 結果はweb(テーブル等)に表示するのではなく、配列変数のままで獲得したいと思っています。 google apps のスプレッドシート内でスクリプトとして使用したいと思っています。 かなり調べたのですがどれも1項目(key1)のみの検索しかヒットしませんでした。 よろしくお願いします。

  • バブルソートの実行時間について

    バブルソートで降順、ランダム順に並んでいるデータを読み込ませて昇順に並び替える実行時間について質問です。 バブルソートにおける計算時間は、データ数が多いほど、並び替える回数が多いほど長くなるはずですが、実際に実行したところ、並び替える回数が多いはずの降順のほうがランダム順よりも早くなりました。 なぜこのようになるのですか? よろしくお願いします。

専門家に質問してみよう