Ios7 OpenGL ES 2.0-3.0 gl_光源等效物?

Ios7 OpenGL ES 2.0-3.0 gl_光源等效物?,ios7,opengl-es-2.0,opengl-es-3.0,Ios7,Opengl Es 2.0,Opengl Es 3.0,我正在尝试将顶点着色器转换为在iOS 7上工作,但我无法确定gl_光源[0].position.xyz的等效项是什么 以下是OpenGL ES 1.0顶点着色器 我已经把所有gl_xxx的东西换成了制服mat4/vec4等,我可以从我的代码中传入,但我不知道该怎么处理这一行 vec4-eyleightpos=gl_光源[0]。位置 下面是要转换的顶点着色器代码 varying vec3 N; varying vec3 L; varying vec3 E; attribute float

我正在尝试将顶点着色器转换为在iOS 7上工作,但我无法确定gl_光源[0].position.xyz的等效项是什么

以下是OpenGL ES 1.0顶点着色器

我已经把所有gl_xxx的东西换成了制服mat4/vec4等,我可以从我的代码中传入,但我不知道该怎么处理这一行

vec4-eyleightpos=gl_光源[0]。位置


下面是要转换的顶点着色器代码

 varying vec3 N;
 varying vec3 L;
 varying vec3 E;
 attribute float meanK;
 attribute float meanKS;
 attribute float gaussian;
 attribute float gaussianS;
 varying float meanCurvature;
 attribute float keyAttrib;
 attribute float keyUni;
 varying float keyShader;
 attribute float cuSS;
 varying float cuSSF;
 attribute float guSS;
 varying float guSSF;
 void main() {
       gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
       vec4 eyePosition = gl_ModelViewMatrix * gl_Vertex;
       vec4 eyeLightPos = gl_LightSource[0].position;
       N = normalize(gl_NormalMatrix * gl_Normal); L = eyeLightPos.xyz - eyePosition.xyz;
       E = -eyePosition.xyz;
       if(keyAttrib == 0.0)
             meanCurvature = meanK;
       if(keyAttrib == 1.0)
             meanCurvature = meanKS;
       if(keyAttrib == 2.0)
             meanCurvature = gaussian;
       if(keyAttrib == 3.0)
             meanCurvature = gaussianS;
       keyShader = keyUni;
       cuSSF = cuSS;
       guSSF = guSS;
}

下面是片段着色器代码

varying vec3 N;
varying vec3 L;
varying vec3 E;
varying float meanCurvature;
varying float keyShader;
varying float cuSSF;
varying float guSSF;
void main() {
vec3 Normal = normalize(N);
vec3 Light = normalize(L);
vec3 Eye = normalize(E);
vec3 Half = normalize(Eye + Light);
vec4 baseColor = vec4(0.5,0.5,0.5,0.0);
vec4 white = vec4(1.0,1.0,1.0,0.0);
vec4 red = vec4(1.0,0.0,0.0,0.0);
vec4 blue = vec4(0.0,0.0,1.0,0.0);
float f = 1.0;
//Locally backscattered light
float alpha = 0.43;
float mu = 1.0;
float delta = 0.35;
float muss = 0.25;
float deltass = 0.01;
float Gd;
if(meanCurvature >= 0)
 Gd = 1.0 + (alpha * exp(-1.0 * pow((meanCurvature - mu),2.0) / delta));
else
 Gd = 1.0;
//Ambient occlusion
float landa = 0.6;
float gamma = 1.0;
float Aa = 1.0 - pow((landa * meanCurvature), (2.0 * gamma));
float lDotv = dot(Light, Eye); float epsilon = 20.0;
float lv;
if(lDotv >= 0.0)
 lv = 0.0;
//Subsurface scatter
else
 float nv = exp(-1.0 * pow(dot(Normal, Eye) - muss, 2.0) / deltass);
lv = pow((-1.0 * lDotv),epsilon); float GSS = -1.0 * meanCurvature * lv * nv;
float Kd = max(dot(Normal, Light), 0.0); float Ks = pow(max(dot(Half, Normal), 0.0),
            gl_FrontMaterial.shininess);
vec4 diffuse = Kd * gl_FrontLightProduct[0].diffuse;
if(dot(Normal, Light) < 0.0) f = 0.0;
vec4 specular = f * Ks * gl_FrontLightProduct[0].specular;
vec4 ambient = gl_FrontLightProduct[0].ambient;
vec4 Css = vec4(1.0,1.0,1.0,1.0);
if(keyShader == 1.0)
      gl_FragColor = (ambient) + (Gd * dot(Normal, Light) * diffuse) - (GSS * Css);
else if(keyShader == 2.0)
      gl_FragColor = Aa * ambient;
else if(keyShader == 3.0)
      gl_FragColor = (Gd * dot(Normal, Light) * diffuse) - (GSS * Css);
else if(keyShader == 4.0)
      gl_FragColor = ambient;
else if(keyShader == 5.0)
gl_FragColor = (Aa * ambient) + (dot(Normal, Light) * diffuse)
            - (GSS * Css);
else if(keyShader == 6.0)
gl_FragColor = Gd * dot(Normal, Light) * diffuse; else if(keyShader == 7.0)
      gl_FragColor = (Aa * ambient) - (GSS * Css);
else if(keyShader == 8.0)
      gl_FragColor = diffuse;
else if(keyShader == 9.0)
gl_FragColor = (Aa * ambient) + (Gd * dot(Normal, Light) * diffuse) - (Css);
else if(keyShader == 10.0)
      gl_FragColor = GSS * baseColor;
else if(keyShader == 0.0)
gl_FragColor = (Aa * ambient) + (Gd * dot(Normal, Light) *
            diffuse) - (GSS * Css);
else if(keyShader == 11.0) {
      if(meanCurvature == 0.0)
            gl_FragColor = baseColor;
      else if(meanCurvature < 0.0)
            gl_FragColor = baseColor + ((-1.0 * meanCurvature) *
      else        blue);
            gl_FragColor = baseColor + (meanCurvature * red);
}
else if(keyShader == 12.0)
      gl_FragColor = ambient + diffuse + specular;
else if(keyShader == 13.0) {
      if(cuSSF == 0)
            gl_FragColor = baseColor;
      else if(cuSSF < 0.0)
      else  gl_FragColor = baseColor + ((-1.0 * cuSSF) * blue);
}           gl_FragColor = baseColor + (cuSSF * red);
else if(keyShader == 14.0) {
      if(guSSF == 0)
            gl_FragColor = baseColor;
      else if(guSSF < 0.0)
      else  gl_FragColor = baseColor + ((-1.0 * guSSF ) * blue);
}           gl_FragColor = baseColor + (guSSF  * red);
else if(keyShader == 15.0)
      gl_FragColor = Gd * diffuse;
else if(keyShader == 16.0)
gl_FragColor = Gd * dot(Normal, Light) * white;
else if(keyShader == 17.0)
gl_FragColor = dot(Normal, Light) * diffuse;
else if(keyShader == 18.0)
      gl_FragColor = Gd * baseColor;
else if(keyShader == 19.0)
      gl_FragColor = Aa * baseColor;
}
可变向量3n;
不同的vec3l;
可变矢量;
曲率变化;
可变浮动键hader;
可变浮点数;
可变浮球;
void main(){
vec3正常=正常化(N);
vec3灯光=正常化(L);
vec3眼=正常化(E);
vec3半=正常化(眼睛+光线);
vec4基色=vec4(0.5,0.5,0.5,0.0);
vec4白色=vec4(1.0,1.0,1.0,0.0);
vec4红色=vec4(1.0,0.0,0.0,0.0);
vec4蓝色=vec4(0.0,0.0,1.0,0.0);
浮点数f=1.0;
//局部后向散射光
浮动α=0.43;
浮动μ=1.0;
浮动增量=0.35;
浮子muss=0.25;
浮点数deltass=0.01;
浮动Gd;
如果(平均曲率>=0)
Gd=1.0+(α*exp(-1.0*pow((平均曲率-mu),2.0)/delta));
其他的
Gd=1.0;
//环境遮挡
浮动朗达=0.6;
浮动伽马=1.0;
浮点数Aa=1.0-功率((朗达*平均曲率),(2.0*伽马));
浮点lDotv=点(光,眼);浮点ε=20.0;
浮动lv;
如果(lDotv>=0.0)
lv=0.0;
//地下散射
其他的
浮动nv=exp(-1.0*pow(点(正常,眼睛)-muss,2.0)/deltass;
lv=功率((-1.0*lDotv),ε);浮点GSS=-1.0*平均曲率*lv*nv;
浮动Kd=最大值(点(正常,轻)0.0;浮动Ks=功率(最大值(点(一半,正常),0.0),
gl_正面材料(光泽);
vec4漫反射=Kd*gl_FrontLightProduct[0]。漫反射;
如果(点(正常,光线)<0.0)f=0.0;
vec4镜面反射=f*Ks*gl_FrontLightProduct[0]。镜面反射;
vec4环境=gl_FrontLightProduct[0]。环境;
vec4 Css=vec4(1.0,1.0,1.0,1.0);
如果(keyShader==1.0)
gl_FragColor=(环境)+(Gd*点(正常,光线)*漫反射)-(GSS*Css);
else if(keyShader==2.0)
gl_FragColor=Aa*环境光;
else if(keyShader==3.0)
gl_FragColor=(Gd*点(正常,光线)*漫反射)-(GSS*Css);
else if(keyShader==4.0)
gl_FragColor=环境光;
else if(keyShader==5.0)
gl_FragColor=(Aa*环境光)+(点(正常光、光线)*漫反射)
-(GSS*Css);
else if(keyShader==6.0)
gl_FragColor=Gd*点(正常,光线)*漫反射;否则if(键阴影==7.0)
gl_FragColor=(Aa*环境)-(GSS*Css);
else if(keyShader==8.0)
gl_FragColor=漫反射;
else if(keyShader==9.0)
gl_FragColor=(Aa*环境光)+(Gd*点(正常光)*漫反射)-(Css);
else if(keyShader==10.0)
gl_FragColor=GSS*基色;
else if(keyShader==0.0)
gl_FragColor=(Aa*环境光)+(Gd*点(正常光、光)*
漫反射)-(GSS*Css);
else if(keyShader==11.0){
如果(平均曲率==0.0)
gl_FragColor=基色;
否则如果(平均曲率<0.0)
gl_FragColor=基色+(-1.0*平均曲率)*
蓝色);
gl_FragColor=基色+(平均曲率*红色);
}
else if(keyShader==12.0)
gl_FragColor=环境光+漫反射光+镜面反射光;
else if(keyShader==13.0){
如果(cuSSF==0)
gl_FragColor=基色;
否则如果(cuSSF<0.0)
else gl_FragColor=基色+(-1.0*cuSSF)*蓝色);
}gl_FragColor=基色+(cuSSF*红色);
else if(keyShader==14.0){
如果(GUSF==0)
gl_FragColor=基色;
否则如果(GUSF<0.0)
else gl_FragColor=基色+(-1.0*GUSF)*蓝色);
}gl_FragColor=基色+(GUSF*红色);
else if(keyShader==15.0)
gl_FragColor=Gd*漫反射;
else if(keyShader==16.0)
gl_FragColor=Gd*点(普通、浅色)*白色;
else if(keyShader==17.0)
gl_FragColor=点(正常,光)*漫反射;
else if(keyShader==18.0)
gl_FragColor=Gd*基色;
else if(keyShader==19.0)
gl_FragColor=Aa*基色;
}

OpenGL ES 2没有像OpenGL ES 1.0那样使用固定的函数管道。您必须以统一或属性的形式传入光源数据

请查看一个示例

您还必须自己实现法线和任何其他功能


有关在OpenGL ES 2.0中可以访问的所有内置组件的列表,请查看。在第4页的顶部,您将看到一个列表和说明。

不确定我是否可以在评论中提出其他问题,但gl_NormalMatrix和gl_Normal是什么类型的?我假设gl_Normal矩阵是mat4,gl_Normal是vec4,它是法线,所以它的单位长度是1,所以它是vec3和mat3。。。现在我需要转换片段着色器。。谢谢JNFJJTJsorry我没早点看到这个。查看我的更新答案以了解更多信息。