2011-06-03 126 views
3

我无法在我绘制的立方体的所有面上获得正确的底纹。我从脸部到另一个脸部的平滑过渡不能正确显示边缘。指定顶点着色器的法线的OpenGL ES 2.0

一个不同的脸部(我得到所需的边缘),我得到的阴影,它显示了构成该脸部的两个三角形。 我认为问题出在我指定的法线上。我附加了我的顶点和普通矩阵以及我的顶点和片段着色器代码。顶点和法线矩阵相同。

我想问题是与法线,但我已经尝试几乎所有与他们但效果不会改变。

//normal matrix and vertex matrix are same 

static const float normals[]= 

    { 
     //v0,v1,v2,v3, 
     //v4,v5,v6,v7 
     0.5,0.5,0.5, -0.5,0.5,0.5, -0.5,-0.5,0.5, 0.5,-0.5,0.5, 

     0.5,0.5,-0.5, -0.5,0.5,-0.5, -0.5,-0.5,-0.5, 0.5,-0.5,-0.5 

    }; 

//vertex shader 

attribute vec4 color; 
attribute vec4 position; 

attribute vec4 normal; 

uniform mat4 u_mvpMatrix; 
uniform vec4 lightDirection; 
uniform vec4 lightDiffuseColor; 
uniform float translate; 

varying vec4 frontColor; 



//varying vec4 colorVarying; 



void main() 

{ 

    vec4 normalizedNormal = normalize(u_mvpMatrix* normal); 
    vec4 normalizedLightDirection = normalize(lightDirection); 

    float nDotL = max(dot(normalizedNormal, normalizedLightDirection), 0.0); 


    frontColor = color * nDotL * lightDiffuseColor; 


    gl_Position = u_mvpMatrix * position; 


} 

//fragment shader 

varying lowp vec4 frontColor; 

void main() 
{ 


     gl_FragColor = frontColor; 


} 

请帮忙?提前致谢 !!

+0

你知道,你不应该回答你的问题来阐述它。我偶然偶然发现了你的答案。如果你想在给定的答案上交流,你应该'添加评论';通过这种方式,海报被通知并且可以回答。然后,对于新的问题材料,通常会编辑原始问题以添加更多信息。 – rotoglup 2011-06-07 18:56:23

+0

显然你的答案已被删除,如果你发布了你的问题的截图,这将是有帮助的。 – rotoglup 2011-06-07 18:57:03

回答

2

您的问题与您的正常矩阵无关,它与您的输入法线有关。

从我所读到的,你提供8个法线,每个顶点一个,这意味着你提供预先平均的法线;你的顶点着色器没有办法对它们取平均值。

要在你的照明中有适当的不连续性,你需要不连续的法线:对于每个四边形,你有4个顶点,每个顶点与法线正常匹配。所以你最终得到6x4 = 24个法线(所有顶点都是如此)。

你可能想看看本作更详细的解释: http://www.songho.ca/opengl/gl_vertexarray.html

相关问题