OBJ格式和平面与平滑着色

Max*_*mus 5 opengl-es blender

我正在使用OpenGL ES 1.1并致力于将Blender的OBJ导出转换为包含顶点数据的二进制文件.我实际上已经有了一个工作工具,但我正在努力改变一些事情,并遇到了一个问题.

即使使用平滑着色,似乎正确的法线(垂直于面平面)也可以实现面部的平面外观.启用平滑着色和正确的法线(仅通过在Blender中标记为锐利的边缘并应用边缘分割修改器),我可以获得平滑部分和锐边的效果.

我要去的地方带来两个问题.

  1. OBJ文件中表示平滑或平面阴影的"s 1"或"s off"线是否完全没有必要从平滑阴影和法线的立场使用?

  2. 当在OpenGL中实际设置为平面着色时,是否完全忽略法线(或者假设所有法线都垂直于面)?

Chr*_*ica 9

要使顶点看起来平滑,其法线必须是相邻面法线(或类似物)的平均值,但不垂直于面平面(除非您测量其所有相邻面的平均平面).

GL_FLAT意味着,面部的颜色不是在三角形上插值,而是从单个三角形角落(不知道哪个,第一个或最后一个).此颜色来自顶点颜色或顶点光照,因此实际上您获得了每个面法线,但这不是面部方向所必需的,而是角点顶点的法线.

如果在OBJ文件中得到每个顶点法线,则不需要s部分.但您可以使用它们来计算顶点法线.s部分是平滑组,并被解释为32位位域.因此实际上有32个不同的平滑组,每个面都可以是多个平面组的一部分.因此,"5"行之后的所有面都是平滑组1和3(第一和第三位设置)的一部分.当两个相邻面是同一平滑组的一部分时,它们之间的边缘是平滑的(顶点共享法线).这样您就可以重建必要的每顶点法线.