バージョン#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);
}
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リファレンスページ があなたの友達であることも忘れないでください。