我对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会产生更奇怪的结果。正常的矢量插值似乎被打破了,剩下的是粗糙的表面,光线不好。所有那些通过扭转法线。 我确信三角形朝向正确的方向,矢量运算完美无瑕,并且所有内容都应该在场景中显示(可以看出剑是绿色的,但是其他表面的那一侧是红色)。
答案 0 :(得分:3)
对我来说听起来很糟糕 - 请记住,除了签名错误之外,还有很多方法可以搞乱法线向量:
glEnable(GL_NORMALIZE)
并查看它是否有所不同来验证。)答案 1 :(得分:2)
不幸的是,您链接到的zip没有代码......
在我将多边形面板混淆之前尝试使用的一件事就是使用GL_LIGHT_MODEL_TWO_SIDE作为glLightModel,这会导致多边形的两边都被点亮而不仅仅是正面。 从记忆中看,用法是
glLightModel(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE)
(或者说是什么) 在任何照明发生之前拨打电话。
这是一个hacky解决方案,但我看不到代码,我猜你已经到了最后期限..至少要有人尝试更好的解决方案:)