我正在开发一个OpenGL应用程序,它现在只绘制一个由几个小圆柱体组成的大管(有点像一个紧身的)。当我打开灯光和法线时,我会产生令人讨厌的效果,因为从某些角度来看,我在圆柱的边框上得到了这些恼人的黑点:
我相信这是气缸非常薄的事实的副产品。基本上我设置顶部/基数时将法线设置为(0,0,+ / - 1),然后侧面法线为(cos(toRadian(beta)),sin(toRadian(beta)),0)。
是否可以删除此效果而不会变得“更胖”?或者我定义法线的方式有问题吗?
由于
答案 0 :(得分:0)
这似乎是圆柱体侧面的渲染。图像中的黄色对应于圆柱的顶部。圆柱体的两侧与顶部成90度,因此它们不会点亮(我猜测光线与相机的方向相同)并且显示为黑色。由于圆柱体太薄,因此它们不会填充像素,因此它们不会显示太多。
如何解决?我有几个想法:
1)只绘制顶部和底部,而不是侧面 - 从这个角度看这肯定会解决问题,但如果你的相机移动会导致更多的问题。
2)禁用光照,然后所有面都将绘制相同的颜色(假设边与底部颜色相同)。
3)使用多次采样 - 这意味着大多数边缘不会出现(因为角度,每个像素更可能位于顶部)。
4)在场景周围添加更多灯光,垂直于当前灯光。
1& 2是你最好的选择,取决于你想要达到的目标。