我希望,在半年多后回答你的问题时,没有任何错误?
因此,在此讨论两点:
a) What should the shader look like
你们的常识用模式矩阵来改变你们的正常状况,而这种模式是特定的。 如果你不这样做,那么,你的模式矩阵可以包含某种轮换。 你们的ube子将轮流使用,但正常情况仍会朝旧方向发展! 这显然是错误的。
因此:当你用模型矩阵改变你的vert时,你也应改变正常情况。 你的正常情况是vec3
而不是vec4
,你对译文不感兴趣(通常只包含方向),因此,你只能通过<代码>mat3(gl_ModelViewMatrix),即上列3-3子matrix,使您的正常工作倍增。
然后:这是ALMOST正确无误的,但仍然是一个错误——原因如下:。 长篇短篇,而不是mat3(gl_ModelViewMatrix)
,你得乘以反向的变体。
开放式第2号令对你来说非常有用,其预示着如下:gl_NormalMatrix/。 因此,正确的法典是:
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
b) But it s different from fixed pipeline, why?
我的头一点是,“与你使用固定管道相差错”。
我并不真正热衷于私营部门司(一长活ders!),但就我而言,当你通过<条码>glLightPara amountfv(GL_Lright_POSITION, ......)条码”具体指明你的灯时,这受到了模式表的影响。 很容易(至少对我来说:)搞错了在错误的协调制度中指明轻立场(或指明方向)的错误。
我不敢肯定,既然我使用现在使用的是GL3和沙子,那么我会怎样正确回顾一下,那么,我会试图......贵国的模型矩阵状况如何? 我认为,你或许可以具体指明物体空间而不是眼空间的方向,以便你的光能与你的物体一起轮换。 IDK如果在此相关,但确保在使用FF时注意这一点。 我记得,在我仍在使用第1.1 GL时,我经常这样做,这是错误的。
根据示范情况,你可以说明:
- eye (camera) space,
- world space,
- object space.
确保这一点。
Huh. 我希望,这将使你更清楚地了解这个问题。 这些结论是:
- always transform your normals along with your vertices in your vertex shaders, and
- if it looks different from what you expect, think how you specify your light positions. (Maybe you want to multiply the light postion vector in a shader too? The remarks about light position coordinate systems still hold)