我无法在我绘制的立方体的所有面上获得正确的阴影。我从一个面部到另一个面部平滑过渡,没有正确显示边缘。
一张不同的脸(我得到了所需的边缘),我得到了阴影,使得它显示了构成那张脸的两个三角形。 我认为问题在于我指定的法线。我附加了我的顶点和普通矩阵以及我的顶点和片段着色器代码。顶点和法线矩阵是一样的。
我想这个问题与法线有关,但我几乎用它们尝试了一切,但效果并没有改变。
//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 :(得分:2)
您的问题与您的正常矩阵无关,它与您的输入法线有关。
根据我的阅读,你提供8个法线,每个顶点一个法线,意味着你提供预平均法线;你的顶点着色器无法取消它们的平均值。
要使光照中存在适当的不连续性,您需要不连续的法线:对于每个四边形,您有4个顶点,每个顶点都与法线符合法线匹配。所以你最终得到6x4 = 24个法线(以及许多顶点)。
您可能需要查看此内容以获取更详细的说明: http://www.songho.ca/opengl/gl_vertexarray.html