简单的定向光和phong法线

时间:2013-04-06 22:49:21

标签: opengl-es-2.0 opengl-es-lighting

我现在第三天拉着头发试图解决一个简单的任务我想。很简单,对于一个大师,不是像我这样的初学者。

我有一个非常简单的三维模型,有平滑法线。

使用书籍和网络上随处可见的标准每顶点定向照明方法渲染模型。

继承我的顶点着色器:

uniform mat4 mvpMatrix;
uniform mat4 normalMatrix;
uniform vec3 lightPosition;
uniform vec4 diffuseColor;

attribute vec4 vertexPosition;
attribute vec3 vertexNormal;

varying vec4 vertexColor;    

void main()
{
    vec3 eyeNormal = normalize(normalMatrix * vertexNormal);
    float nDotVP = max(0.0, dot(eyeNormal, normalize(lightPosition)));

    vertexColor = diffuseColor * nDotVP;
    gl_Position = mvpMatrix * vertexPosition;
}

uniform mat4 mvpMatrix; uniform mat4 normalMatrix; uniform vec3 lightPosition; uniform vec4 diffuseColor; attribute vec4 vertexPosition; attribute vec3 vertexNormal; varying vec4 vertexColor; void main() { vec3 eyeNormal = normalize(normalMatrix * vertexNormal); float nDotVP = max(0.0, dot(eyeNormal, normalize(lightPosition))); vertexColor = diffuseColor * nDotVP; gl_Position = mvpMatrix * vertexPosition; }

现在这完全符合预期。当我开始翻译模型矩阵时,问题就开始了。变换本身再次完美无缺,只是我的GLSL照明没有按预期工作。似乎模型矩阵的转换不会以某种方式被用于光扩散计算(仅转换为旋转和缩放工作正常)。

E.g。我渲染相同的模型两次,两者之间的唯一区别是在Z dir中由-1.0转换的模型矩阵。两种模型都可以在预期位置渲染,正确旋转,缩放和平移。但是,两者都会点亮相同。光不是在整个场景中插值,而是均匀地应用于每个模型,即不考虑模型转换。

现在我想我可以放弃phong平滑法线并使用平面阴影法线来解决这个问题,但锋利的边缘看起来非常糟糕。另一种解决方案可能是切换到片段着色器中的每像素照明,这是我真正想要避免的。

任何想法上面的数学有什么问题?

谢谢

0 个答案:

没有答案