[解決済み] gl_PointSizeの動作について
質問事項
DXのバックグラウンドを持つ私は、gl_PointSizeとgl_PointCoordがどのように機能するのか、正確に理解しようとしているところです。私はオンラインとマニュアルページを探しましたが、それらについて本当に良い説明を持っていませんでした。例えば、300x300 の出力バッファがあり、300x300 バッファの各位置に対応する 90,000 点のバーテックスシェーダを定義したとします(各次元で 1 ずつ増加します)。ここで、頂点シェーダで gl_PointSize を 2 と定義すると、フラグメントシェーダは 90,000 回呼び出されるのでしょうか、それとも 360,000 回呼び出されるのでしょうか?360,000回であれば、gl_PointCoordが何を表しているのか理解できるのですが。しかし、もし90,000回だけなら、各フラグメント出力は4ピクセルを表すということになるのでしょうか?そしてこの場合、gl_PointCoordは何を表しているのでしょうか?常に0.5,0.5となり、あまり意味がないのでしょうか?
ありがとうございます。
解決方法は?
の14.4.1 "基本的なポイントラスタライズ"セクションを参照してください。 OpenGL 4.5コアプロファイル仕様 が記載されています。
ポイントラスタライズは、フレームバッファの各ピクセルにフラグメントを生成します。 その点の(xw; yw)を中心とする正方形の中に中心がある。 一辺の長さは現在のポイントサイズと同じです。
そのため、ポイントサイズ > 1 の場合、複数のフラグメントが生成される可能性があります。フラグメントシェーダーはフラグメントごとに最低1回起動されます。マルチサンプリングを除けば、フラグメントごとに1回起動されるので、36万回が正解となります。
これは、FS が起動される前にフラグメントを破棄するかもしれないので、あなたが説明しているシーンで役割を果たすかもしれないし、そうでないかもしれない初期の深度テストも無視することに注意してください。
仕様書の同項目より。
<ブロッククオート
点スプライトのラスタライズで生成されたフラグメントには、すべて
同じ関連データ、すなわち、その頂点に対応するデータである。
点です。ただし、フラグメントシェーダー内蔵の
gl_PointCoord
には、ポイント・スプライト・テクスチャ座標が含まれます。そのため
s
点スプライト
テクスチャ座標は、ポイント
水平に左から右へ もし
POINT_SPRITE_COORD_ORIGIN
は
LOWER_LEFT
このとき、t座標は垂直方向に0から1まで変化します。
から上へ。それ以外の場合は、点スプライトテクスチャ座標原点
は
UPPER_LEFT
は、その
t
座標は、垂直方向に0から1まで変化します。
上から下へ [...]
つまり、点座標は、あなたが期待するものを正確に表しているのです。ただし、この定義は、ポイントサイズが1でマルチサンプリングが使用されていない場合でも、ポイント座標が必ずしも0.5になるとは限らないことを意味します。その場合、フラグメントシェーダが起動されるのは ピクセルセンター そのため、1x1 ピクセルの大きな点のどこをサンプリングしているかがわかります。
関連
-
[解決済み] glReadPixelsはどのように動作するのですか?
-
[解決済み] Emscripten/OpenGLのコードで「glDrawArrays: attribute 1の範囲外の頂点にアクセスしようとする」(ネイティブC++では動作する) [終了しました]
-
[解決済み] 頂点シェーダとフラグメントシェーダにおけるgl_Colorとgl_FrontColorの関係を教えてください。
-
[解決済み] OpenGL GLXエクステンションはサポートされていません
-
[解決済み] Ken Silverman氏のVoxlapエンジンで使用されているアルゴリズムについて、どなたか教えてください。
-
[解決済み] glutSpecialFuncを正しく使うには?
-
GLMライブラリの概要 glm::transform, glm:scale, glm::rotate
-
[解決済み】GLSLシェーダをデバッグする方法は?
-
[解決済み】OpenGLのテキストレンダリングは、バージョン4.1現在、何が最先端なのでしょうか?[クローズド]。
-
[解決済み] OpenGLのフレームバッファとレンダーバッファの概念と違いについて教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FreeGLUTとGLFWの違いは何ですか?[クローズド]
-
[解決済み] glEnableVertexAttribArrayは具体的に何をするのですか?
-
[解決済み] OpenGL GLXエクステンションはサポートされていません
-
[解決済み] glRotate(angle,x,y,z), この場合のx,y,zは何ですか?
-
[解決済み] glDeleteBuffers()はいつ呼び出すべきですか?
-
[解決済み] FOVXの計算(openGL)
-
[解決済み】GLSLシェーダをデバッグする方法は?
-
[解決済み] GLSLシェーダーの正しいファイル拡張子は何ですか?[クローズド]。
-
[解決済み] バーテックスシェーダとフラグメントシェーダの比較 [重複].
-
[解決済み] OpenGLでglLoadIdentity()は何をするのですか?