2011-06-30 10 views
3

これまでのところ、GLSLジオメトリシェーダは、入力頂点が投影/モデルビュー行列によって変換された後に動作します。つまり、ジオメトリシェーダはクリップ座標のものを処理します。GLSLジオメトリシェーダと投影行列

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

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

答えて

4

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

重要なことは、最終ラスタライズシェーダステージがgl_Positionに出力することです。 そのは、同質のクリップスペースに必要なものです。ジオメトリシェーダを背後に持つ頂点シェーダは、gl_Positionに書き込む必要はありません。

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

実際のコアジオメトリシェーダの機能ではなく、ARB_geometry_shader4を使用する必要があります。できるだけその拡張子を避けるべきでしょう。ジオメトリシェーダを持つハードウェアでOpenGL 3.2を実行できます。

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

GL_TRIANGLESがサポートされていない場合は、キューブを作成できますか?

EndPrimitive()がそうです。あなたはプリミティブが終わったときにそれを呼び出します。 2番目のプリミティブを放つことを止めるものは何もありません。または3番目。

また、これはおそらく遅くなることに注意する必要があります。ジオメトリシェーダは、レンダリングのパフォーマンスが速いことは知られていません。

+0

ありがとうございます。最初のテストの後、キューブを描画するための私の古いglBegin/glEndメソッドよりも速いと思われました。純粋なVBOとベンチマークを行う必要があると思います。また、あなたはプレインズウォーカーとして過剰配給されています:) – kamziro

関連する問題