Joe*_*ewd 5 c++ opengl blender normals assimp
目前我正在尝试使用在搅拌器中制作的圆柱体对象上进行照明(在z轴上缩放的基本圆柱体,不再进行进一步处理)并使用以下选项在via Assimp中加载此对象aiProcess_GenSmoothNormals | aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_FlipUVs
.在blender的wavefront导出选项中,triangulate
选项已设置.
问题是在cilinder上进行了一些缩放(通常高于某个缩放阈值)我的OpenGL实现显示反转的法线(我有一个显示法线的几何着色器),并且因为它反转法线,所以也反转了光照.这种情况只发生在具有一定比例的这些圆柱状物体上(至少,只有它发生在我身上).除了这些圆柱体外,我场景中的每个其他对象都能正常工作
我不知道这是否与Assimp如何加载.obj文件,或者blender在导出时处理法线的方式有关,或者它可能与大的z-scale有关,因为它会破坏正常的插值或任何东西?在下面你会找到反转法线(左)和正确法线(右)的图像,其中反正常对象通过搅拌器完成大的z刻度.
我这次手动在搅拌器中对气缸进行三角测量,并验证了它们的法线.所有气缸的法线都是正确的,然后按原样输出.然而,现在一个管道具有正确的照明,但是其他管道仍然具有倒转的法线,而它们具有与工作管道相同的三角测量,这是令人困惑的.下图显示了柱面的法线.
好的,我想出了什么.一旦我开始将正确点亮的管道缩放到与错误管道(左侧管道)完全相同的比例,然后再次反转正确管道的法线(在我的OpenGL程序中反转,在Blender中,法线仍然看起来很好).因此,气缸长度的比例肯定与他们的法线相反有关,虽然我不知道那可能是什么.
法线反转的问题是由 Blender 中的逆比例引起的。当缩小到低于0
对象开始再次增长(具有负比例),由于逆比例缩放的圆柱体看起来与正常缩放的圆柱体相同,因此不会立即可见。
由于搅拌机缩放的工作原理,一些鼠标移动在缩放时往往会突然从正缩放跳到负缩放,这导致我的一些圆柱体被负缩放。将对象导出到 时,负缩放圆柱体的法线会反转.obj
。我将其称为搅拌机中的错误,因为从搅拌机本身显示的法线中看不到这一点(它们看起来是正确的)。