Xcode4 OpenGL ES 2.0为顶点着色器指定法线

Xcode4 OpenGL ES 2.0为顶点着色器指定法线,xcode4,ios-simulator,opengl-es-2.0,Xcode4,Ios Simulator,Opengl Es 2.0,我无法在我绘制的立方体的所有面上获得正确的着色。我得到了一个平滑的过渡,从一个面到另一个面,不能正确显示边缘 一个是另一个面(在那里我得到了所需的边),我得到了阴影,这样它就显示了组成该面的两个三角形。 我相信问题在于我指定的法线。我正在附加顶点和法线矩阵以及顶点和片段着色器代码。顶点和法线矩阵是相同的 我想问题出在法线上,但我尝试了几乎所有的方法,但是效果没有改变 //normal matrix and vertex matrix are same static const float no

我无法在我绘制的立方体的所有面上获得正确的着色。我得到了一个平滑的过渡,从一个面到另一个面,不能正确显示边缘

一个是另一个面(在那里我得到了所需的边),我得到了阴影,这样它就显示了组成该面的两个三角形。 我相信问题在于我指定的法线。我正在附加顶点和法线矩阵以及顶点和片段着色器代码。顶点和法线矩阵是相同的

我想问题出在法线上,但我尝试了几乎所有的方法,但是效果没有改变

//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;


}

请帮忙?提前谢谢

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

从我读到的,你提供了8条法线,每个顶点一条,这意味着你提供了预平均法线;顶点着色器无法对其进行反平均

要在照明中具有适当的不连续性,需要不连续法线:对于每个四边形,有4个顶点,每个顶点的法线与四边形法线匹配。因此,最终的结果是6x4=24条法线(尽可能多的顶点)

您可能需要查看以下内容以获得更详细的解释:

你知道,你不应该回答你的问题来详细阐述它。我只是偶然发现了你的答案。如果你想就给定的答案进行交流,你应该“添加评论”;这样,海报就会得到通知并可以回答。然后,对于新的问题材料,通常会编辑原始问题以添加更多信息。显然,您的答案已被删除,如果您发布了问题的屏幕截图,这将很有帮助。