質問

HTML5キャンバス3Dレンダラーを作成しています、そして私はそうすることなく私はかなり遠く離れたことを言うだろうが、私はソワーのショップパーバーに遭遇しました。いくつかの法線計算の助けを借りて、キューブ上にバックフェイスカリングを実装しようとしています。また、これが私のユースケースと3D加速1つに適用できるのは一般的な質問です。

任意の料金で、立方体を回転させているので、私は間違った顔が隠されていることを発見しました。例:

キューブ上のバックフェイスカルリングの問題

以下の頂点を使用しています。 https://developer.mozilla.org/en/WebGL/Creating_3D_objects_using_WebGL#Define_the_positions_of_the_cube% 27S_VERTICES

私が使用している一般的な手順は次のとおりです。

  1. キューブの頂点を変換する変換行列を作成

  2. 各面に、各面上の各点について、これらをVEC3Sに変換し、ステップ1で行ったマトリックスで掛けます。

  3. 私はNEWELLの方法を使用して顔の表面の正常を得てから、その通常のvec3からのドット製品を入手して、[-1,1,1]、[-1,1,1]、ここに入れるために良い価値を考えてください。私はいくつかの人々がこれのためにカメラの位置を使うのを見ました、しかし...

  4. カメラマトリックスを使用する通常のステップをスキップすると、結果のベクトルからx値とyの値を引いてください。それはかなり恣意的なものが私が引っ張って、本当に任意のものです。

  5. 私は二つのことを疑問に思います。手順3の手順が正しい場合(最も可能性が高い)、そして私が顔を描くポイントの順番が正しくない(非常に可能性が高い)。後者が当てはまる場合、問題を視覚化する方法はわかりません。私は、法線が描かれている方向であるという言葉であると言っているのを見ました、しかし...それは私の頭をそれの周りに包むのか、それが私の問題の源です。

    おそらく関係ないが、私が使用しているマトリックスライブラリはGL行列:

    href="https://github.com/toji/gl-matrix" real="nofollownoreferrer"> https://github.com/toji/gl-matrix

    また、私が使用している私のオープンソースコードベース内の特定のファイルもここにあります:

    http://code.google.com /p/nanoblok/source/browse/nb11/app/render.js

    事前にありがとう!

役に立ちましたか?

解決

あなたのシステム全体を見ていませんが、「作られたVEC3」は任意であるべきではありません。それは「画面の外」ベクトルであるべきです(あなたの投影は≧em> x 、 y z →→∈ x 、 y ∞)は、座標系の利き手とスクリーン軸に応じて、ν0,0、-1 /またはν0,0,0,12です。明示的な「カメラマトリックス」(通常はビューマトリックスと呼ばれます)がありませんが、カメラ(ビューとプロジェクション)はあなたのステップ4投影で暗黙的に定義されています!

しかしながら、このアプローチは、視点のものではなく、または視点の左側の顔を考える、右側の面が右側に面して、視線の方向に面している。ドット製品は0になりますが、それはされるはずです目に見える)実際の3Dハードウェアで使用される通常のアプローチは、最初にすべての変換(投影を含む)を実行し、次に結果の2D三角形が反時計回りまたは時計回りに巻かれているかどうかを確認し、その条件に基づいて保持または廃棄します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top