Je veux ajouter un effet d'éclairage très simple dans mes modèles via les shaders. J'ai trouvé là-bas un sommet et un fragment shaders qui rendent le travail sur OpenGL:Teintes Vertex et Fragment pour effet d'éclairage en 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"
};
Le problème est que je travaille dans OpenGL ES2, parce que je développe une application Android. Et il semble que la variable intégrée gl_FrontLightModelProduct n'est pas disponible pour GLES20, car la compilation échoue dans cette ligne.
Ma question est donc: Comment puis-je modifier les shaders ci-dessus pour les faire fonctionner dans un contexte OpenGL ES20?
Vous devrez vous débarrasser de toutes les références aux variables d'état prédéfinies qui étaient disponibles dans OpenGL hérité. C'est très similaire à ma réponse ici: http://stackoverflow.com/questions/24416589/glsl-using-custom-output-attribute-instead-of-gl-position. Bien qu'il s'agisse de passer au profil de base de bureau, ce que vous devez faire pour OpenGL ES est très similaire. –
Très instructif votre réponse là-bas. Merci !! – user3417052