4

これまでいろいろいじってみたところ、GLSL ジオメトリ シェーダーは、入力頂点が射影/モデルビュー マトリックスによって変換された後に機能することがわかりました。つまり、ジオメトリ シェーダーはクリップ座標で処理を行います。

ジオメトリ シェーダーを使用して GL_POINTS を、たとえば で作られた立方体に変換するとどうなるGL_TRIANGLESでしょうか? クリップ座標で物事を計算するとき、結果の形状は常にあなたの方を向いているように見えます/回転/スケーリングなどを無視します.

また、GL_TRIANGLES可能なジオメトリ出力タイプの 1 つとしてサポートされていないようです。しかし、とにかく試してみましたが、うまくいくようです。これはビデオカードに依存していると思いますか?GL_TRIANGLESサポートされていない場合、立方体を作成することはできますか? たぶん、スペースの間に幅ゼロの三角形のストリップを作りますか??

4

1 に答える 1

5

シェーダーを使用しています: ジオメトリ シェーダーは、頂点シェーダーが渡したものに作用します。それをクリップ スペース値にしたい場合、ジオメトリ シェーダーはクリップ スペース値で動作します。頂点シェーダーがそれらにアイ スペース値を渡す場合、ジオメトリ シェーダーはアイ スペース値で動作する必要があります。

重要なのは、最終的なプレラスタライズ シェーダー ステージが に何を出力するかgl_Positionです。それが均質なクリップ空間にある必要があります。背後にジオメトリ シェーダーがある頂点シェーダーは、 に書き込む必要さえありませんgl_Position

また、可能なジオメトリ出力タイプの 1 つとして GL_TRIANGLES がサポートされていないようです。

実際のコア ジオメトリ シェーダー機能ではなく、ARB_geometry_shader4 を使用する必要があります。可能であれば、おそらくその拡張は避けるべきです。ジオメトリ シェーダーを備えたすべてのハードウェアで OpenGL 3.2 を実行できます。

いずれにせよ、コア機能は三角形を出力としてサポートしていません。ポイント、ライン ストリップ、トライアングル ストリップをサポートしています。

GL_TRIANGLES がサポートされていない場合、立方体を作成することはできますか?

それが EndPrimitive() の目的です。プリミティブを使い終わったら、それを呼び出します。2 番目のプリミティブの放出を妨げるものは何もありません。または3番目。

また、これはおそらく遅くなることに注意してください。ジオメトリ シェーダーは、高速なレンダリング パフォーマンスについては知られていません。

于 2011-06-30T02:21:12.763 に答える