【发布时间】:2019-03-01 23:53:15
【问题描述】:
所以,我正在使用 C++ 和 OpenGL 4 开发一个简单的游戏引擎。现在我正在努力渲染导入的模型。
我正在使用 FBX sdk 导入 fbx 模型,使用一种非常简单的方法:基本上我访问 fbx 的每个节点并将网格数据附加到一个稍后用于渲染的单个大结构中。但是,我希望能够为模型使用的每种材质指定不同的片段着色器(例如,为汽车轮辋和车灯指定不同的着色器)。
作为参考,UE4 有一个材质系统,允许用户使用类似蓝图的编辑器定义简单的着色器。
我想将类似的概念应用到我的引擎中,允许创建一个材质对象,该对象指定一段片段着色器代码和一组要使用的纹理。
我面临的问题是:
- 很明显,我必须为使用不同材料的每个模型部件分开绘制调用,因为我不能在绘制调用中间交换程序(可以吗?):在这一点上,最好有每个部分或单个部分都有单独的 vao/vbo/ebo,并跟踪一个部分的结束位置和下一个部分的开始位置? (我想这是最好的选择)
- 仅预编译着色器片段并将其附加到当前程序(即 glAttach + glLinkProgram + glUseProgram)是一种好习惯,还是为每种材质预链接整个程序更好,考虑到顶点着色器总是一样的吗?
【问题讨论】:
标签: c++ opengl rendering game-engine fragment-shader