我在概念化基于着色器的 OpenGL 程序中使用的工作流时遇到了一些麻烦。虽然我从未真正使用固定功能或基于着色器的管道完成任何重大项目,但我已经开始学习和试验,我很清楚着色器是要走的路。
但是,从直观的角度来看,固定功能管道对我来说更有意义。使用该方法渲染场景既简单又程序化——就像绘画一样。如果我想画一个盒子,我告诉显卡画一个盒子。如果我想要很多盒子,我会在一个循环中画出我的盒子。固定功能管道非常适合我既定的编程倾向。
这些似乎都与着色器一起消失了,这就是我遇到障碍的地方。许多基于着色器的教程展示了如何在屏幕上绘制三角形或立方体等,效果很好。但是,它们似乎根本没有涉及我将如何将这些概念应用到例如游戏中。如果我想绘制三个程序生成的三角形,我需要三个着色器吗?显然不是,因为那是不可行的。尽管如此,这显然不像将绘图代码粘贴在一个运行三遍的循环中那么简单。
因此,我想知道在游戏开发环境中使用着色器的“最佳实践”是什么。一个简单的游戏我应该有多少着色器?如何在它们之间切换并使用它们来渲染真实场景?
我不是在寻找细节,只是一般的理解。例如,如果我有一个渲染圆的着色器,我将如何重用该着色器在屏幕上的不同点绘制不同大小的圆?如果我希望每个圆圈都具有不同的颜色,如何将一些信息传递给每个圆圈的片段着色器?