私は HTML5 キャンバスの 3D レンダラーを作成しています。SO の助けを借りずにかなり進んだと思いますが、ある種のショーストッパーに遭遇しました。いくつかの法線計算を利用して、立方体に背面カリングを実装しようとしています。また、これを WebGL としてタグ付けしました。これは、私のユース ケースと 3D アクセラレーション ユース ケースの両方に適用できる一般的な質問であるためです。
いずれにせよ、立方体を回転させていると、間違った面が隠されていることがわかりました。例:
次の頂点を使用しています: https://developer.mozilla.org/en/WebGL/Creating_3D_objects_using_WebGL#Define_the_positions_of_the_cube%27s_vertices
私が使用している一般的な手順は次のとおりです。
立方体の頂点を変換するための変換行列を作成します
各面、および各面の各点について、これらを vec3 に変換し、ステップ 1 で作成した行列を掛けます。
次に、ニューウェルの方法を使用して顔の表面法線を取得し、その法線と作成された vec3 ([-1, 1, 1] など) から内積を取得します。ここに入れます。これにカメラの位置を使用する人もいますが...
カメラ マトリックスを使用する通常の手順をスキップして、結果のベクトルから x 値と y 値を取得して、ライン レンダラーとフェース レンダラーに送信しますが、内積が 0 より大きい場合のみです。引っ張る、本当に。
私は2つのことを疑問に思っています。ステップ 3 の手順が正しい場合 (そうではない可能性が高い)、面に描画している点の順序が正しくない場合 (可能性が非常に高い)。後者の場合、問題を視覚化する方法がよくわかりません。法線は関係ない、線が描かれている方向だと人々が言うのを見たことがありますが... それについて頭を包むのは難しいです, またはそれが私の問題の原因です.
おそらく問題ではありませんが、私が使用しているマトリックス ライブラリは gl-matrix です。
https://github.com/toji/gl-matrix
また、私が使用しているオープン ソース コードベースの特定のファイルは次のとおりです。
http://code.google.com/p/nanoblok/source/browse/nb11/app/render.js
前もって感謝します!