【发布时间】:2011-05-04 20:21:29
【问题描述】:
我对 OpenGL 有一个非常困扰的问题。
我的作业是用人和剑和其他一些物体创建场景,放一个点光源是那个家伙的每个“手掌”(右边是绿色,左边是红色),并有一个定向光源像太阳一样。
这是我的程序的两个版本的 zip:http://www.woofiles.com/dl-245221-OdPUtOaW-Release.zip
(不幸的是,名字是匈牙利语,“szép_de_rossz_oldalon_a_fény”的意思是“不错,但灯在对面”,“fény_jó_oldalon_de_ronda”的意思是“灯在右侧,但很丑”。)
我的问题是灯光的效果出现在我的镶嵌参数曲面的另一侧。
一个合乎逻辑的解释是表面法线不正确,但是将它们乘以 -1 会得到一个更奇怪的结果。法线向量插值似乎被破坏了,剩下的是一个光线不好的粗糙表面。所有这一切都是通过颠倒常态来实现的。 我确信三角形朝向正确的方向,矢量算术完美无缺,并且一切都放置在它应该在的场景中(可以看到剑是绿色的,但其他表面的那一侧是红色)。
【问题讨论】:
-
您是否检查过着色器以确保它们适合右手坐标系?这可能只是反转z轴的问题。编辑:另外,听起来您将法线乘以模型视图矩阵,您可能需要研究一下。
-
我不使用自定义着色器,我们必须使用标准管道。我的法线通过 glNormal3f 提供给 OpenGL,因此是的,我相信它们乘以模型视图矩阵,但不是直接乘以我。我无法理解的是,将法线与 -1 相乘怎么会弄乱整个照明?