web-dev-qa-db-ja.com

デフォルトのGLSLシェーダーはどのように見えますか?バージョン330

バージョン#330のデフォルトの頂点、フラグメント、およびジオメトリGLSLシェーダーはどのように見えますか?

私のグラフィックカードがサポートしているので、Cgコンパイラ経由で#version 330 GLSLバージョン3.30 NVIDIAを使用します。

デフォルトのシェーダーとは、シェーダープログラムがオフになっているときにグラフィックカードが行うのとまったく同じことを行うシェーダーを意味します。

#version 330の良い例が見つかりません。一日中ググっている。 デフォルトシェーダーという用語がささいな、または基本的なものと呼ばれているかどうかわからないので、それが見つからないのです。

バージョン330の本や、バージョン330の簡単な初心者向けチュートリアルへのリンクも推奨されます。

#version 110の自明な頂点シェーダーの例は、デフォルトの頂点変換を行います

#version 110

void main()
{
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}

#version 110の自明なフラグメントシェーダーの例は、色を赤に変えます

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
25
ColacX

OpenGLには「デフォルト」のシェーダーはありません。頂点を変換してスペースをクリップし、色を与えるシェーダーの非常にシンプルな例が欲しいので、ここに行きます:

頂点シェーダー:

#version 330

layout(location = 0)in vec4 vert;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vert;
}

フラグメントシェーダー:

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

コアOpenGL 3.3プロファイルでは、マトリックススタックなどの多くの古い固定機能のサポートが削除されています。独自のマトリックスを処理して、シェーダーに送信する必要があります。 ftransformはなく、gl_Positionがほとんど唯一の有効なgl_ *変数です。

GlBindAttribLocationは非推奨ではありませんが、頂点属性の場所を定義するための推奨される方法は、GLSLの「layout(location = x)」を使用することです。

頂点シェーダーでは、「属性」が「イン」になり、「可変」が「アウト」になりました。フラグメントシェーダーでは、「varying」は「in」になり、「gl_FragColor」は「out」変数によって定義されます。 gl_FragColorはまだ有効であると思いますが、out変数を使用して色を定義できるようになりました。

このチュートリアル は非常に優れており、コアOpenGLとGLSL 3.30を教えています。GLSLについてさらに学ぶために、このチュートリアルを使用することをお勧めします。 GLSLリファレンスページ があなたの友達であることも忘れないでください。

36
Robert Rouhani