私は最近openGLでプログラミングを始めました。基本的なプリミティブを作成するコードを作成し、webGL でシェーダーを使用しました。私はこの件について広範囲にグーグルで検索しましたが、まだそれほど明確ではありません。基本的に、私が知りたいことはここにあります。プレーンなopenGLでは実行できないGLSLで実行できることはありますか、それともGLSLは単に物事をより効率的に実行しますか?
2 に答える
短いバージョンは次のとおりです。OpenGL はグラフィックスをレンダリングするための API であり、GLSL (GL シェーディング言語の略) はプログラマーがパイプライン シェーダーを変更できるようにする言語です。別の言い方をすれば、GLSL は OpenGL フレームワーク全体の (小さな) 一部です。
全体像のどこに GLSL が適合するかを理解するために、非常に単純化されたグラフィックス パイプラインを考えてみましょう。
指定された頂点 ---(頂点シェーダー)---> 変換された頂点 ---(プリミティブ アセンブリ)---> プリミティブ ---(ラスタライズ)---> フラグメント ---(フラグメント シェーダー)---> 出力ピクセル
シェーダー (ここでは、頂点シェーダーとフラグメント シェーダーのみ) はプログラム可能です。それらを使ってあらゆる種類のことを行うことができます。赤と緑のチャネルを交換するか、バンプ マッピングを実装してサーフェスをより詳細に表示することができます。これらのシェーダーを作成することは、グラフィックス プログラミングの重要な部分です。カスタムシェーダーで何ができるかを理解するのに役立ついくつかの素晴らしい例のリンクがあります: http://docs.unity3d.com/Documentation/Components/SL-SurfaceShaderExamples.html .
それほど遠くない過去には、それらをプログラミングする唯一の方法は、GPU アセンブラーを使用することでした。OpenGL の場合、言語は ARB アセンブラーとして知られています。これが難しいため、OpenGL 関係者は GLSL を提供してくれました。GLSL は、グラフィックス ハードウェア上でコンパイルおよび実行できる高水準言語です。まとめると、プログラマブル シェーダーは OpenGL フレームワーク (または最新のグラフィックス API) の不可欠な部分であり、GLSL によってプログラミングが非常に簡単になります。