opengl 为什么不能给“in”值赋值

qhhrdooz  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(128)

当我试图像这样给in赋值时:

const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"in vec2 TexCoord;\n"
"in vec3 Normal;\n"      //  <------here is the value I want to assign
"in vec3 Tangent;\n"
"in vec3 biTangent;\n"
"uniform sampler2D ourTexture;\n"
"uniform sampler2D norTexture;\n"
"uniform vec3 lightDir;\n"
"uniform vec3 viewDir;\n"
"void main()\n"
"{\n"
"   mat3 accNormalTrans = mat3(Tangent, biTangent, Normal);\n"
"   Normal = texture(norTexture, TexCoord).xyz;\n"// in 变量不可随意更改
"   Normal = normalize(texNormal*2.0-1.0);\n"
"   Normal = normalize(accNormalTrans*texNormal);\n"
"   vec4 ambient = texture(ourTexture, TexCoord)*0.5;\n"//norTexture error    //vec4(texNormal, 1.0f)
"   vec4 diffuse = ambient*max(0,-dot(lightDir,Normal));\n"
"   vec4 specular = ambient*pow(max(0,-dot(normalize(lightDir+viewDir),Normal)),32);\n"
"   FragColor = ambient+diffuse+specular;\n"
"}\n\0";

之前的法线是模型平面的法线向量,我想给它一个法线向量,用法线贴图来计算。2但是我把模型设为透明的,所以模型会一直跟随我的相机。3然后我试着为那个法线向量建立一个新的值,模型被正确地渲染了。
我想知道为什么会发生这种情况。
我已经在谷歌上搜索了这个问题,但没有具体的解释。我将不胜感激,如果你能解释它或列出一个链接。

avkwfej4

avkwfej41#

语言不允许。
OpenGL着色语言规范,版本4.40:
写入声明为输入的变量是编译时错误。
这可能是为了简化和/或优化硬件级上的实现,因为这样的变量通常使用固定位置来实现。

相关问题