Open GLES 2.0 android中的漫反射光模型

Open GLES 2.0 android中的漫反射光模型,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,为什么在Openg gles 2.0中有阶梯状而不是渐进式漫反射照明 String fragmentShaderCode = "precision highp float;" + "uniform vec4 u_color;" + "varying vec3 v_pos;" + "varying vec3 v_normal;" + "void m

为什么在Openg gles 2.0中有阶梯状而不是渐进式漫反射照明

 String fragmentShaderCode =

        "precision highp float;" +

                "uniform vec4 u_color;" +
                "varying vec3 v_pos;" +
                "varying vec3 v_normal;" +

                "void main() {" +
                "vec3 u_camera=vec3(0.0,0.0,0.0);"+
                "vec3 u_lightPosition=vec3(0.0,0.0,0.0);"+
                "vec3 n_normal=normalize(v_normal);"+
                "vec3 lightvector = normalize(u_lightPosition - v_pos);"+


                "float ambient=0.1;"+
                "float k_diffuse=0.5;"+
                "float cos=(n_normal.x*lightvector.x+n_normal.y*lightvector.y+n_normal.z*lightvector.z)/(length(n_normal)*length(lightvector));"+
                "if(cos<0.0)cos=0.0;"+
                "float an=acos(cos)*(180.0/3.14);"+
                "float diffuse =k_diffuse* (1.0-an/90.0);"+
我制作了三角形,以形成法线为(0.0,0.0,1.0)的平面。问题在于,灯光逻辑的工作原理通常是正确的,但视觉效果很差。这是我的三角形: 静态浮点三角形坐标[]={ //按逆时针顺序: 5.0f、5.0f、0.0f、//顶部 -5.0f,5.0f,0.0f, -5.0f,-5.0f,0.0f

        5.0f,  5.0f, 0.0f,
        -5.0f,  -5.0f, 0.0f,
        5.0f,  -5.0f, 0.0f,
       // bottom right
};
static float norms[] = {
        // in counterclockwise order:
        0.0f,  0.0f, 1.0f,   // top
        0.0f,  0.0f, 1.0f,
        0.0f,  0.0f, 1.0f,

        0.0f,  0.0f, 1.0f,  // top
        0.0f,  0.0f, 1.0f,
        0.0f,  0.0f, 1.0f
};
这是我的顶点着色器:`private final String vertexShaderCode=

        "uniform mat4 prMat;" +
                "uniform mat4 camMat;" +

                "attribute vec3 a_pos;" +
                "varying vec3 v_pos;" +
                "attribute vec3 a_normal;" +
                "varying vec3 v_normal;" +



                "void main() {" +
                "vec4 ver=camMat*vec4(a_pos,1.0);"+

                "v_pos=ver.xyz;"+
                "vec4 v_n=vec4(a_normal,1.0);"+
                "v_normal=normalize(v_n.xyz);"+
                "  gl_Position = prMat*camMat*vec4(a_pos,1.0);" +
                "}";`
以及render中的一些代码: 矩阵.translateM(camMat,0,0.0f,0.0f,-7.0f); M三角图(M投影矩阵,camMat,0)`


尝试使用两个单位长度向量的点积,而不是余弦。从函数的角度来看,这两个向量是等效的,但我怀疑实现是完全不同的。一张错误的图片可能也会有帮助。它没有帮助。我加载了图片:有一些像扔石头的水面上的圆圈。还有几个问题。(1)您运行的是什么设备/GPU?以及(2)屏幕的EGL颜色格式是什么?1)Galaxy j2 Prime。在哪里可以看到GPU?2)我应该通过编程了解EGL颜色格式吗?使用什么函数?
        "uniform mat4 prMat;" +
                "uniform mat4 camMat;" +

                "attribute vec3 a_pos;" +
                "varying vec3 v_pos;" +
                "attribute vec3 a_normal;" +
                "varying vec3 v_normal;" +



                "void main() {" +
                "vec4 ver=camMat*vec4(a_pos,1.0);"+

                "v_pos=ver.xyz;"+
                "vec4 v_n=vec4(a_normal,1.0);"+
                "v_normal=normalize(v_n.xyz);"+
                "  gl_Position = prMat*camMat*vec4(a_pos,1.0);" +
                "}";`
enter code here