ジオメトリシェーダ(ジオメトリシェーダ)

月曜日から金曜日まで、毎日、午前7時、北京時間 - バイリンガル時間更新は、ギターを弾きながらプログラムを学びながら、素敵な庭の養殖を行います!

当社のエンジニアはLanxiangの卒業がそれを翻訳され、翻訳の問題があるかどうか疑ってはいけません!

ジオメトリシェーダは、論理的には、フロントエンド(論理的のために、ジオメトリシェーダは、レンダリングパイプラインの最後のシェーダステージである)、格子、頂点とテッセレーション後(頂点とテッセレーションステージの後とラスタライザの前に座っての最後のシェーダステージであります前に)。ジオメトリシェーダは、プリミティブごとに一度実行され、プリミティブが処理される各ジオメトリシェーダのために(プリミティブ、各処理の処理時間を時間を作る頂点の全ての入力頂点データの全てへのアクセスを有し、すべてのポイントは。ジオメトリシェーダはまた、増加またはプログラム的な方法でパイプラインを流れるデータ量を低減することができるという点で、シェーダのステージの中で一意である)プリミティブにアクセスすることができます(ジオメトリシェーダは非常にユニークですそれはプログラム)出力プリミティブを増加または減少させることができる。テッセレーションシェーダも増減作業量をパイプラインで、だけ暗黙パッチlevelforテッセレーションを設定することによってすることができる(tessellaものの ン)が増加したかの要素を減少させたが、唯一のいくつかの設定によって暗黙的に行うことができますすることができます。

ジオメトリシェーダの別のユニークな特徴は、(他の点は、ユニークなジオメトリシェーダモードはプリミティブ中に変更することが可能である)プリミティブモード中間パイプラインを変更することができるということである。例えば、それらは、入力として三角形を取り、点の束を生成することができますまたは出力線(例えば、それらが入力プリミティブ三角形、最終的な出力点または線として使用してもよい)、あるいは独立したポイント(またはポイント入力により作成された一層の三角形)から三角形を作成する。例えば、ジオメトリシェーダは、に示されています3.9リスト。(Listing3.9は、ジオメトリシェーダのサンプルを示します)

#version 450コア
におけるレイアウト(三角)。
レイアウト(点、max_vertices = 3)のうち。
ボイドメイン(ボイド)
{
iはint型。
用(i = 0; iは(gl_in.lengthを<); iは++)
{
gl_Position = gl_in [I] .gl_Position。
EmitVertex();
}
}
表示3.9:私たちの最初のジオメトリシェーダ

我々は、それらの頂点を見ることができるようにポイントに三角形を変換する別の単純なパススルーシェーダとして3.9行為をリストに示すシェーダ(3.9リストは、単純なジオメトリシェーダを示し、それは単にドットに三角)。最初のレイアウト修飾子は、ジオメトリシェーダは、(最初​​の修飾子は、入力として表される三角形のジオメトリシェーダを必要)その入力として三角形を表示することが期待されていることを示している。第2のレイアウト修飾子は、ジオメトリシェーダは、点を生成しているであろうOpenGLを指示点の最大数各シェーダが生成することは、3つの(第2の改質は、出力点ジオメトリシェーダであることに留意されたい、そして最大3点の各出力)であろう。主な機能で、ループはgl_inのメンバーのすべてを通りますその.LENGTH()関数を呼び出すことによって決定された配列、(主な機能には、アレイをgl_inループ反復あり、そのサイズは、インターフェース長さによって得ることができます)

我々は、実際に我々は三角形を処理している、すべての三角形は3つの頂点(実際には、我々は既にデータ我々入力が三角形であるので、アレイのサイズは、3であることを知って、そして三角形は、三点を有している)を有しているので、配列の長さは3であることがわかっていますジオメトリシェーダの出力は、(これらの出力データは、再び同じの複数の頂点シェーダ出力データとなる)、再度、頂点シェーダと同様である。特に、我々は、特に(得られた頂点の位置を設定するgl_Positionに書き込みます我々は)、頂点の位置を設定するgl_Positionを使用する。次に、我々は、ジオメトリシェーダの出力に頂点を生成EmitVertex()、(我々は次に、ドットを出力EmitVertexを呼び出し)を呼び出す。ジオメトリシェーダが自動的に(EndPrimitiveを呼び出す)であなたのシェーダので、明示的にこの関数を呼び出すの終わりには、(あなたがシェーダでそれを呼び出すように表示する必要はありませんので、ジオメトリシェーダが自動的に、EndPrimitiveを呼び出します)。このシェーダを実行した結果として、3つの頂点がな生産となります。この例では必要ありません EDとの点としてレンダリング(実行後、三点がレンダリングされますが存在します)

私たちの単純なモザイク状の三角形の例には、このジオメトリシェーダを挿入することにより、私たちは(私たちのレンダリングパイプラインの後に詰め、このジオメトリシェーダでは、我々は図3.2に結果を取得します)図3.2に示す出力を得る。このイメージを作成するには、我々はglPointSize()を呼び出すことによって5.0にポイントサイズを設定します(この絵を得るために、我々はポイントが大きくなることができ、簡単に見ることができるように、ポイントサイズは、5.0になった設定されています)。このポイントは大なり、非常に目に見えます

ジオメトリシェーダ(ジオメトリシェーダ)

この日の翻訳は〜さようなら、明日お会いし、ここで取得します

最新のプロットを初めて取得し、東漢アカデミーと公共グラフィック番の心に注意を払ってください。

ハン・カレッジ、あなたはああをプレイするのを待ちます

おすすめ

転載: blog.51cto.com/battlefire/2421591
おすすめ