私はGLSLで基本的な頂点シェーダを作成しようとしていますが、わかりやすくするために、マトリックスを作成し、メイン以外の簡単な操作を実行する関数をいくつか追加したいと思います()ループです。しかしGLSLのシェーダと関数:エラーC1108
、私が実行しよう:
uniform float scale;
void main()
{
vec4 pos = gl_ProjectionMatrix * gl_Vertex;
pos *= scaleMatrix(scale);
gl_Position = pos;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
}
mat4 scaleMatrix(const in float s) {
return mat4(s, 0.0, 0.0, 0.0,
0.0, s, 0.0, 0.0,
0.0, 0.0, s, 0.0,
0.0, 0.0, 0.0, 1.0);
}
私はエラーを取得する:エラーC1008:未定義の変数 "scaleMatrix"。 ただし、
uniform float scale;
void main()
{
vec4 pos = gl_ProjectionMatrix * gl_Vertex;
pos *= mat4(s, 0.0, 0.0, 0.0,
0.0, s, 0.0, 0.0,
0.0, 0.0, s, 0.0,
0.0, 0.0, 0.0, 1.0);
gl_Position = pos;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
}
はうまくいきます。誰も私のためにこれについていくつかの光を当てることができますか?
シェーダでユニフォームとして渡すことのできる行列の計算を実際に行うべきではありません。良いコンパイラはそれを最適化するかもしれませんが、それでも醜いです。変化する/属性/インの影響を受けるものだけを計算することがベストプラクティスです。制服として渡すことができるものは、制服で渡されるべきです。 – datenwolf