我想通过着色器在我的模型中添加一个非常简单的照明效果。我发现有一个顶点和片段着色,使基于OpenGL的工作:顶点和片段着色器在OpenGL ES20中的照明效果
static const char* vertSource = {
"uniform vec3 lightPosition;\n"
"varying vec3 normal, eyeVec, lightDir;\n"
"void main()\n"
"{\n"
" vec4 vertexInEye = gl_ModelViewMatrix * gl_Vertex;\n"
" eyeVec = -vertexInEye.xyz;\n"
" lightDir = vec3(lightPosition - vertexInEye.xyz);\n"
" normal = gl_NormalMatrix * gl_Normal;\n"
" gl_Position = ftransform();\n"
"}\n"
};
static const char* fragSource = {
"uniform vec4 lightDiffuse;\n"
"uniform vec4 lightSpecular;\n"
"uniform float shininess;\n"
"varying vec3 normal, eyeVec, lightDir;\n"
"void main (void)\n"
"{\n"
" vec4 finalColor = gl_FrontLightModelProduct.sceneColor;\n"
" vec3 N = normalize(normal);\n"
" vec3 L = normalize(lightDir);\n"
" float lambert = dot(N,L);\n"
" if (lambert > 0.0)\n"
" {\n"
" finalColor += lightDiffuse * lambert;\n"
" vec3 E = normalize(eyeVec);\n"
" vec3 R = reflect(-L, N);\n"
" float specular = pow(max(dot(R, E), 0.0), shininess);\n"
" finalColor += lightSpecular * specular;\n"
" }\n"
" gl_FragColor = finalColor;\n"
"}\n"
};
的问题是,我在OpenGL ES2我的工作,因为我正在开发一个Android应用程序。而且似乎内置变量gl_FrontLightModelProduct不适用于GLES20,因为我在这一行中编译失败。
因此,我的问题是:我如何修改上述着色器,使它们在OpenGL ES20上下文中工作?
您将不得不摆脱对传统OpenGL中可用的预定义状态变量的所有引用。这与我的答案非常相似:http://stackoverflow.com/questions/24416589/glsl-using-custom-output-attribute-instead-of-gl-position。虽然这是要转向桌面核心配置文件,但您需要为OpenGL ES做的工作非常相似。 –
非常有启发性你的答案在那里。谢谢 !! – user3417052