Open GL ES 2.0 の GLSL を学習しようとしています。私はチュートリアルを見回しましたが、まったく意味がないため、明らかに説明に欠けているものがあります. 以下のコードをご覧ください。これは、公式の OpenGL ES 2.0 リファレンス カードから抜粋したものです。
これは、頂点シェーダーであると想定されています。
uniform mat4 mvp_matrix; // model-view-projection matrix
uniform mat3 normal_matrix; // normal matrix
uniform vec3 ec_light_dir; // light direction in eye coords
attribute vec4 a_vertex; // vertex position
attribute vec3 a_normal; // vertex normal
attribute vec2 a_texcoord; // texture coordinates
varying float v_diffuse;
varying vec2 v_texcoord;
void main(void)
{
// put vertex normal into eye coords
vec3 ec_normal = normalize(normal_matrix * a_normal);
// emit diffuse scale factor, texcoord, and position
v_diffuse = max(dot(ec_light_dir, ec_normal), 0.0);
v_texcoord = a_texcoord;
gl_Position = mvp_matrix * a_vertex;
}
問題 1: 何も初期化されていません。最初に 8 つの変数/オブジェクトがリストされており、1 つも初期化されていません。したがって、8 つの null 変数/オブジェクトがあります。
問題 2: 初期化される変数/オブジェクトは、前の 8 つの null 変数/オブジェクトを使用して初期化されます。素晴らしいので、今はすべてがnullです...
問題 3: 関数から何も渡されません。これがどのように影を落とすことができるかは、私にはわかりません。何も取り込まず、何も渡しません。それが影響を与える唯一のものは gl_Position です。これは明らかにある種の特別な出力変数です。しかし、それは mvp_matrix と a_vertex だけに依存しているので、他のすべてのものは何のためにあるのでしょうか?
そして、それはこの例だけではなく、これまでに見つけたすべてのものです. 一連の変数を宣言し、それらのほとんどを使用せずに、null オブジェクトをあちこちに渡したり割り当てたりすると、何ができるかわかりません。