我正在完成一个波前对象解析器,我想用它来构造通用网格对象。我的引擎使用 OpenGL 4 和着色器来绘制引擎中的所有内容。
我的问题是关于如何确保渲染网格的最佳渲染效率。
波前.obj 文件通常指定了许多对象子组。
可能会为子组分配特定的材料(例如闪亮的红色)。
因此,网格可能是相当复杂的子组集合,每个子组都分配有自己的材质。
我的问题是——
问:我是否需要分别绘制每个子组,例如为每个子组调用 glDrawElements ?(因此,如果我有 4 个单独的子组,我将不得不进行 4 次 glDrawElements 调用,从而通过 4 次统一更改(对于材质/纹理)调用着色器 4 次)
glDrawElements( GL_TRIANGLES, nNumIndicesInGroup, GL_UNSIGNED_INT, ((char*)NULL)+ first-vertex-offset );
如果这是正确的,那么我将不得不计算:
每个子组中的索引(意味着每个子组有一个单独的索引数组和 VAO) 子组开始的顶点偏移量
这似乎非常低效,我是在吠叫错误的树吗?
此外,来自Wavefront obj wiki 页面:
Smooth shading across polygons is enabled by smoothing groups.
s 1
...
# Smooth shading can be disabled as well.
s off
...
谁能建议平滑着色值表示什么?例如 s1、s2、s4 等。