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条法线(尽可能多的顶点) 您可能需要查看以下内容以获得更详细的解释:
你知道,你不应该回答你的问题来详细阐述它。我只是偶然发现了你的答案。如果你想就给定的答案进行交流,你应该“添加评论”;这样,海报就会得到通知并可以回答。然后,对于新的问题材料,通常会编辑原始问题以添加更多信息。显然,您的答案已被删除,如果您发布了问题的屏幕截图,这将很有帮助。