OpenGL照明出现在相反的一侧

| 我对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会得到更奇怪的结果。法向矢量插值似乎被破坏了,剩下的就是光线不好的粗糙表面。所有这些都通过反转法线来实现。 我确定三角形朝向正确的方向,矢量算术是完美无缺的,并且一切都放置在应该放置的场景中(一个人可以看到剑是绿色的,但是其他表面的那一侧是红色的)。     
已邀请:
听起来对我来说是很糟糕的法线-请记住,除了符号错误外,还有很多方法可以修正法线向量: 您的法线可能没有单位长度(您可以尝试按
glEnable(GL_NORMALIZE)
进行验证,看看是否有所不同)。 它们可能并非真正垂直于表面(通过将三角形边缘的叉积与法向矢量进行比较来检查) 您可能对三角形顶点的包装(CW / CCW)不一致,从而有效地翻转了法线的符号(除非启用了剔除功能,否则您可能根本看不到某些三角形) 祝好运!     
不幸的是,您链接的zip没有代码... 在混合多边形面之前必须尝试使用​​的一种方法是使用GL_LIGHT_MODEL_TWO_SIDE作为glLightModel,它使多边形的两面都被照亮,而不仅仅是正面。 从内存中的用法是
glLightModel(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE)
(或其他卑鄙的东西) 在任何照明发生之前拨打电话。 这是一个很棘手的解决方案,但我看不到代码,我想您的期限到了..至少在有人提出更好的解决方案之前,可以尝试一下:)     

要回复问题请先登录注册