2

クワッド内に幾何学的形状を手続き的に生成するシェーダーがあります。基本的に、このフラグメント シェーダをアクティブにしてクワッドをレンダリングすると、シェイプの境界にあるフラグメントが計算され、それ以外はdiscardすべて計算されます。

問題はクワッドの寸法です。現時点では、頂点データを 2 回渡す必要があります。1 回目は VBO に、2 回目はuniform変数としてシェーダーに渡します。これにより、作成する形状の大きさを認識できます。

フラグメントシェーダー内にいるときに現在のクワッドの左上と右下の頂点の座標を取得する方法を用意することで、これを一度だけ行う方法はありますか?頂点データを一度 OpenGL に変換し、シェーダーにクワッド内に収まる最大の形状を計算させますか?

4

3 に答える 3

1

自分で頂点を引っ張ることができます。頂点データを使用して Uniform Buffer または Texture Buffer を作成し、フラグメント シェーダーでこのバッファーにアクセスするだけです。頂点シェーダーでは、どの頂点を出力するかを知るために、組み込み変数 gl_VertexID を使用できます。

于 2013-05-14T15:20:40.040 に答える
1

おそらくジオメトリシェーダーを使用したいと思います。各頂点は、四角形の角の位置 (2 ~ 4 の値のベクトル) と四角形のサイズ (必要な四角形の一般性に応じて、単一の値または最大 9 まで) で構成されます。

ジオメトリ シェーダーはクワッドの追加の頂点を生成し、サイズをフラグメント シェーダーに渡します。

正確に何をしているかによっては、ポイント スプライトを使用して、それらが持つ暗黙的な座標を使用することもできます ( gl_PointCoord)。GL_POINT_SIZE_RANGEただし、ポイント スプライトには最大サイズがあります (およびで照会できますGL_POINT_SIZE_GRANULARITY)。

于 2013-01-04T20:31:49.010 に答える
0

クワッドの左上と右下の頂点を、各頂点の 2 つの追加入力属性として渡します。四角形自体は三角形としてレンダリングされます。

頂点シェーダーで、2 つの出力属性をフラットとして宣言し (補間されないように)、入力属性をこれらの出力にコピーします。

于 2013-01-05T09:54:24.393 に答える