쉐이더를 통해 내 모델에 매우 단순한 조명 효과를 추가하고 싶습니다.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하고 있어요 있다는 것입니다 : 내가 거기 정점 및 OpenGL에 작품을 조각 쉐이더를 발견했다. 그리고이 라인에서 컴파일이 실패하기 때문에 내장 변수 gl_FrontLightModelProduct를 GLES20에 사용할 수없는 것 같습니다.
내 질문에 : 어떻게 위의 쉐이더를 수정하여 OpenGL ES20 컨텍스트에서 작동하게 할 수 있습니까?
레거시 OpenGL에서 사용할 수있는 미리 정의 된 상태 변수에 대한 모든 참조를 제거해야합니다. 그것은 내 대답은 여기에 아주 비슷합니다 : http://stackoverflow.com/questions/24416589/glsl-using-custom-output-attribute-instead-of-glposition. 데스크톱 핵심 프로필로 이동하는 동안 OpenGL ES에서해야 할 일은 매우 비슷합니다. –
매우 유익한 답변입니다. 감사 !! – user3417052