目前,我正在尝试在搅拌机中制作的圆柱体对象上进行照明(在 z 轴上缩放的基本圆柱体,未进行进一步处理)并通过 Assimp 使用以下选项加载该对象aiProcess_GenSmoothNormals | aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_FlipUVs
。在搅拌机的波前导出选项triangulate
中设置了该选项。
问题是在 cilinder 上进行了一些缩放(通常高于某个缩放阈值),我的 OpenGL 实现显示了反转的法线(我有一个显示法线的几何着色器),并且因为它反转了法线,所以照明也反转了。这只发生在这些具有一定缩放比例的圆柱状物体上(至少,只有在我发生这种情况时)。我场景中的所有其他对象都可以正常工作,除了这些圆柱体。
我不知道这是否与 Assimp 加载 .obj 文件的方式有关,或者与混合器在导出时处理法线的方式有关,或者可能与较大的 z 比例有关,因为它破坏了正常的插值或任何东西?在下面,您将找到反向法线(左)和正确法线(右)的图像,其中反向法线对象通过搅拌器完成了较大的 z 比例。
编辑
这次我手动对搅拌机中的圆柱体进行了三角测量并验证了它们的法线。所有圆柱体的法线都正确,然后按原样导出。但是,一个管道现在有正确的照明,但其他管道的法线仍然是反转的,而它们与工作管道具有相同的三角剖分,这令人困惑。下图显示了圆柱体的法线。
编辑
好吧,我想通了。一旦我开始将正确点亮的管道缩放到与不正确管道(左侧)完全相同的比例,然后正确管道的法线再次反转(在我的 OpenGL 程序中反转,在 Blender 中,法线看起来仍然很好)。因此,圆柱体长度的比例肯定与它们的法线反转有关,尽管我不知道那可能是什么。