3

私はまだ「javascript 3d エンジン」に取り組んでいます ( stackoverflow 内のリンク)。最初は、すべてのポリゴンが立方体の面だったので、平均 Z で並べ替えるとうまくいきました。しかし、今は「進化」しており、正しい順序でポリゴン (4 つ以上の頂点を含む可能性があります) を描画したいと考えています。つまり、カメラに近いポリゴンが最後に描画されます。

基本的に、それらを回転させて2Dに「遠近法」化する方法は知っていますが、正しい順序で描画する方法はわかりません。

明確にするために:

//my 3d shape = array of polygons
//polygon = array of vertices
//vertex = point with x,y,z
//rotation is around (0,0,0) and my view point is (0,0,something) I guess.

誰でも助けることができますか?

ps: 解決策を探して思いついたいくつかの「キャッチ フレーズ」: Z バッファリング、レイ キャスティング (?!)、平面方程式、ビュー ベクトルなど - 簡単に理解できる答えが必要だと思います。こいつに尋ねた。ありがとう。

p.s2: ポリゴンの重なりや交差についてはあまり気にしません...だから、画家のアルゴリズムは確かに良いかもしれません。しかし:それは正確には何ですか?ポリゴンの距離を決定するにはどうすればよいですか?? 多角形には多くの点があります。

4

3 に答える 3

4

ポリゴンを並べ替えて下から上に描画する手法は、「ペインターのアルゴリズム」と呼ばれます。残念ながら、3 つのポリゴンが互いに重なり合う可能性があるため、並べ替えの手順は一般に解決できない問題です。

したがって、必ずしも「上」にあるポリゴンが存在するとは限りません。Z バッファや BSP ツリー (ポリゴンの分割を含む) を使用するなどの代替アプローチでは、この問題は発生しません。

于 2011-01-18T15:58:08.797 に答える
1

ポリゴンの距離を決定するにはどうすればよいですか?? 多角形には多くの点があります。

Painter のアルゴリズムは最も簡単に実装できますが、ポリゴンごとに 1 つの「距離」または Z 値 (すべてのポリゴンの Z 値の平均に近似できる) しかないと仮定しているため、非常に単純な場合にのみ機能します。ポリゴン内のポイント)。もちろん、2 つのポリゴンが互いに交差する場合、これは間違った結果を生成します。

実際には、ポリゴンの距離値は 1 つではありません。ポリゴンの表面上の各ポイントは、ビューアーからの距離が異なる可能性があるため、各ポイントには独自の「距離」または深度があります。

あなたはすでにZ-bufferingについて言及しましたが、それはこれを行う 1 つの方法です。これを HTML キャンバスに効率的に実装できるとは思いませんが、一般的な考え方は次のとおりです。

  1. 各ピクセルの色がメイン キャンバス上の対応するピクセルの Z 深度を表す "Z バッファ" という追加のキャンバスを維持する必要があります。

  2. 多角形を描画するには、その表面上の各点を通過し、Z バッファーで示されるように、以前のオブジェクトよりも視聴者に近い点のみを描画します。

于 2011-01-18T16:00:29.857 に答える
0

アルゴリズムでポリゴンの一部を 2 つに分割する必要がある場合でも、BSP ツリー (バイナリ スペース パーティション ツリー) を調査することで、いくつかのアイデアが得られると思います。いくつかの例は、ここhttp://www.devmaster.net/articles/bsp-trees/または Google で BSP ツリーを見つけることができます。私の意見では、コードを返信として投稿することは、複雑なトピックであるため、深刻ではありません。

于 2011-01-18T15:20:40.213 に答える