Open GLES 2.0 android中的漫反射光模型
为什么在Openg gles 2.0中有阶梯状而不是渐进式漫反射照明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
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