2

gl_PointCoordそのピクセルの UV マッピング座標を表す 2D ベクトルを返します。ただし、フラグメント シェーダーでのみ使用できるようです。で頂点シェーダーからフラグメントシェーダーに値を送信できることは知っていますがvarying、逆に送信することはできますか? 現在の頂点の UV 座標を取得できますか?

gl_PointCoord頂点シェーダーでアクセスできますか?

4

1 に答える 1

2

「そのピクセルでの UV マッピング座標」 - 確かに、頂点シェーダーにはピクセルがありません。ポイントスプライトが実際にどのように機能するかがわかりません。1 ピクセルより大きいピクセルを出力する単一の頂点シェーダー呼び出しgl_PointSizeは、このポイントに対して複数のフラグメント シェーダー呼び出しをもたらします (ポイントは複数のピクセルをカバーするため)。そして、これらのフラグメントは、gl_PointCoordこの大きなポイント スプライト内の位置に基づいて取得されます。ただし、複数のフラグメントをカバーする各ポイント スプライトは、常に 1 つの頂点から生成されます。したがって、概念的には、この単一の頂点ごとは各頂点にgl_PointCoordすぎ(0.5, 0.5)ませんが、頂点シェーダー内のピクセルごとの UV 座標はもちろん、ピクセルの概念が実際には存在しないため、最終的にはこれでも意味がありません。

「しかし、他の方法で送信できますか」 - グラフィックス パイプラインは単一方向でしか機能しないため、もちろん、フラグメント シェーダーから頂点シェーダーにデータを送信することはできないため、これはかなり非公式に意図されたものであると確信しています。

編集:あなたのコメントに関して、ポイントスプライトを使用しない場合、gl_PointCoord変数にはまったく意味がありません。これを一般的な UV 座標として使用することはできません (フラグメント シェーダーが妥当な値をどのように考え出すか)。そのためには、頂点シェーダーから ( としてvarying) 有効なテクスチャ座標を自分で出力する必要があります。これは、フラグメント シェーダーでアクセスされるフラグメントに補間されますattribute。通常のように、最終的に追加の として頂点シェーダーに渡される可能性があります。

于 2012-12-07T08:42:10.407 に答える