問題タブ [normals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 頂点データからピクセル法線を取得します
ライティングには、フラグメントシェーダーの法線ベクトルが必要です。私が読んだチュートリアルでは、モデルの頂点と一緒に通常のデータを提供するように求められます。しかし、法線は頂点によって指定された面によってすでに与えられていませんか?
法線を計算するには、三角形の3つの頂点すべてが必要です。しかし、私が知る限り、頂点シェーダーの各パスで1つの頂点にしかアクセスできません。
頂点データに基づいて各ピクセルの法線ベクトルを計算するにはどうすればよいですか?その後、法線マップを適用したいのですが、それは後で行われるため、この質問とはあまり関係がありません。
glsl - シェーダーで法線を回転します
個々の位置と回転を持ついくつかのモデルがあるシーンがあります。法線が与えられると、シェーダーは各ピクセルに単純な双方向ライティングを適用します。
それが私の頂点シェーダーです。
そして、これがフラグメントシェーダーです。
回転のないオブジェクトの場合、これは正常に機能します。ただし、回転モデルの場合、照明も回転します。もちろん、そうではありません。
その理由は、法線が回転しないためです。すでに試しf_normal = model * normal;ましたが、これは法線に回転と変換の両方を適用します。
では、ライティングのためにフラグメントシェーダーに送信する前に、頂点シェーダーで法線を回転させるにはどうすればよいですか?一般的なアプローチは何ですか?
3d - ワールド空間法線をスクリーン空間法線に変換する
ワールド空間で定義されたサーフェス法線をスクリーン空間の法線に変換する適切な方法は何ですか? 透視分割は物事をクリップ空間に変換し、私が理解している限り、この空間では画像平面と同一平面にある平面は同一平面のままであるため、単純に射影行列を掛けることはできないと思います。
しかし、私が探している変換は、グラフィック A に描かれている青い世界の法線が異なるスクリーン空間の法線になるように、変換された法線になるはずです (なぜなら、それらの平面は画像平面と同一平面にありますが、それらはカメラに面していないからです)。 - 一方、グラフィック B に描かれている法線は、表面がカメラに面しているため、変換後に (多かれ少なかれ) 等しくなるはずです。

私が探している変換は何ですか?どのように計算するのですか?
これは、いくつかの画面空間効果に必要です。
c++ - OBJ ファイルの読み込み、法線の使用方法 (#vertices < #normals)
obj ファイルがあり、指定された法線を使用せずにオブジェクトを opengl に正常にロードしました。
ファイルの形式は次の
とおりです。

メッシュの表示機能は次のようになります。
結果は次のとおりです。

OpenGL が照明方程式に使用するデフォルトの法線ベクトルが原因で、オブジェクトが平らに見える可能性があることを読みました。
これは法線で解決できます。指定された法線は 780 で、頂点は 155 です。
各 glVertex3f 呼び出しの前に glNorm を使用しようとしましたが、obj は完全に奇妙に見えます (行など)。
私は何をすべきか?
編集#1: これは私がファイルを読む方法です:
そして、これは私がそれを表示する方法です:
関数 displayMesh は openGL の Render 関数内で呼び出され、ローダー関数は Setup OpenGL 関数内で呼び出され、メッシュ ツリー オブジェクトはグローバル変数です。
編集 #2:
ツリーが法線でどのように見えるか:
また、これはOpenGL のセットアップ関数のコードです。
flash - Flash と AGAL: 法線ベクトルを適切に補間する方法
ゲームEchochromeのように、サーフェスのエッジ (ポリゴンではなく!) を描画できるシェーダーのセットを作成しようとしています。
グラフィックス プログラミングで覚えていることによると、これを行うためのテクニックは、マルチパス レンダリングを作成することです。最初のパスでは、面の法線ベクトルと深度を RGBA カラーとしてエンコードし、これらをテクスチャに描画する必要があります。2 番目のパスでは、テクスチャ内の値を検索し、現在のフラグメントの法線または深度情報が周囲のテクセルの法線または深度と大幅に異なる場合、エッジを描画する必要があります。
(注:これを行う簡単な方法があれば、特にFlashで簡単にできる場合は教えてください。ただし、私の具体的な質問は次のとおりです。)
最初のパスのプログラミングで問題が発生しました。DirectX 9.0c を使用した 3D ゲーム プログラミングの紹介 で読んだことから:フランク D. ルナによるシェーダー アプローチ、法線ベクトルを「補間」する正しい方法は、三角形の頂点の法線ベクトルを平均してから、それを使用することです。表面上のすべてのフラグメントの値。ただし、私のフラグメント シェーダーは代わりに法線ベクトルを補間しているため、サーフェスの単色ではなくグラデーションが描画されます。
補間の代わりに AGAL に必要な平均化を行わせるにはどうすればよいですか?
c++ - Kinect深度画像からの積分画像法線推定
Kinect 深度画像から生成された点群から表面法線を推定するために、次のことを行っています。
そして、次のエラーが発生しています:
[1;31m[pcl::OrganizedNeighbor::radiusSearch] 入力データセットは射影装置からのものではありません! 残差 (MSE) 0.053184、1406 個の有効ポイントを使用 [0;m
続行方法がわかりません。または、生の kinect 深度画像から法線を (効率的に) 計算する正しい方法は何ですか?
c++ - NAN に戻る曲率場を正規推定する
次のように、整理された点群の表面法線を計算しています。
法線を繰り返し処理すると、曲率フィールドはすべてのポイントで NAN に設定されます。計算で何か間違っていますか?
c++ - 頂点法線の計算
私はグーグルで何時間も検索しましたが、答えはよく説明されていません。私は照明を扱っており、頂点法線が必要です。この頂点バッファがあるとしましょう(立方体です):
では、頂点法線を計算するにはどうすればよいでしょうか。それで全部です。ありがとう
opengl - 高さマップアーティファクトからの法線マップ
高さマップからフラグメントシェーダーで法線マップをベイク処理しています。高さマップは見栄えがよく、滑らかに見えます。ただし、法線マップを生成すると、非常に奇妙な結果が得られます。
これが問題を示す2つのレンダリングされた画像です。1つはすべての照明計算を含み、もう1つはメッシュの上に法線マップ画像を適用しています。


法線マップをベイクする方法は、フラグメントシェーダーで隣接するピクセルをサンプリングすることです。
メッシュは32x32で、法線マップと高さマップは64x64です。隣接するピクセルをサンプリングするフラグメントシェーダーコードは次のとおりです。
texturePosは、頂点シェーダーでvertexPosition.x / 128として計算されます(頂点間の距離が4ピクセルであるため、128です。したがって、32 * 4 = 128)。
なぜ私の結果はとても奇妙なのですか?
java - OpenGL法線の誤解?
LWJGL を実装ライブラリとして使用して、照明を OpenGL で動作させようとしています。私が抱えていると思う問題は、法線を適切に設定していないため、照明が特定の角度で機能しないことです。私がテストしているキューブのコードは次のとおりです。