【发布时间】:2013-09-02 02:24:26
【问题描述】:
我在概念化基于着色器的 OpenGL 程序中使用的工作流时遇到了一些麻烦。虽然我从未真正使用固定功能或基于着色器的管道完成任何大型项目,但我已经开始学习和试验,并且我很清楚着色器是要走的路。
但是,从直观的角度来看,固定功能管道对我来说更有意义。使用该方法渲染场景既简单又程序化——就像绘画一样。如果我想画一个盒子,我告诉显卡画一个盒子。如果我想要很多盒子,我会在一个循环中画出我的盒子。固定功能管道非常符合我既定的编程倾向。
这些似乎都带有着色器,这就是我遇到障碍的地方。许多基于着色器的教程展示了如何在屏幕上绘制三角形或立方体,这些都可以正常工作。但是,它们似乎根本没有涉及我将如何将这些概念应用到例如游戏中。如果我想绘制三个程序生成的三角形,我需要三个着色器吗?显然不是,因为那是不可行的。不过,这显然不像只是将绘图代码粘贴在运行 3 次的循环中那么简单。
因此,我想知道在游戏开发环境中使用着色器的“最佳实践”是什么。一个简单的游戏我应该有多少着色器?如何在它们之间切换并使用它们来渲染真实场景?
我不是在寻找细节,只是一般的理解。例如,如果我有一个渲染圆的着色器,我将如何重用该着色器在屏幕上的不同点绘制不同大小的圆?如果我希望每个圆圈具有不同的颜色,如何将一些信息传递给每个圆圈的片段着色器?
【问题讨论】:
-
"很多基于着色器的教程都展示了如何在屏幕上绘制三角形或立方体等,效果很好。"一页,因此不仅仅是“绘制一个对象”。有many tutorials that answer any and all of your questions。
-
我同意 NB。阅读教程,买一本书,或者找一些简单的游戏引擎,然后把它拆开。虽然这本书将是开始使用 OpenGL 的最简单方法。
-
@JakeKing:“我在前几部分中找不到我要找的东西。”那是你的问题。您不是在尝试将各种教程试图教给您的内容内化。您正试图跳过并浏览以挑选出一些数据内核。这不是任何教程的工作方式。就像您不会在中间开始阅读小说一样,您也不会通过寻找特定的东西来开始学习。只需选择一个相当长的教程,然后从头到尾阅读它。到时候,你会看到你感兴趣的。
-
或者换一种说法,如果您了解如何使用一个对象进行渲染,那么您就足够了解如何使用 10 个对象进行渲染。如果您知道如何将参数传递给一个对象的着色器,那么您就知道它在 30 中是如何工作的。如果您了解您正在使用的系统,那么从一到多是一项微不足道的练习。