2

为什么人们倾向于混合已弃用的固定功能管道功能,如矩阵堆栈、gluPerspective()、glMatrixMode(),以及当这意味着手动完成并作为统一推送到 GLSL 中时,为什么不这样做。

这种方法有什么好处吗?

4

5 回答 5

4

就用户的理智而言,这样做是有正当理由的。固定功能矩阵(以及 GLSL 中跟踪的其他固定功能状态)是全局状态,在所有 Uniform 之间共享。如果要更改每个着色器中的投影矩阵,只需在一个地方更改即可。

在没有固定功能的 GLSL 中执行此操作需要使用统一缓冲区。要么,要么您必须构建一些系统,将状态信息发送到您要使用的每个着色器。后者是完全可行的,但很麻烦。前者比较新,2009年才推出,需要DX10级硬件。

仅使用固定功能和 GLSL 状态跟踪要简单得多。

于 2012-05-22T06:19:57.993 回答
1

据我所知,没有任何好处(除非您认为不必重新编码功能是一种好处)。

很可能只是懒惰,或者对替代方法缺乏了解。

于 2012-05-22T05:45:43.927 回答
0

本质上是因为这些应用程序需要着色器才能运行,但程序员太懒惰/压力太大,无法重新实现那些使用 OpenGL 兼容性配置文件已经可用的功能。

“难以”替换的显着特征是线条宽度(大于 1)、线条点画和单独的前后多边形模式。

于 2012-05-22T05:51:53.847 回答
0

大多数教程都教授过时的 OpenGL,所以也许人们不知道更好。

于 2012-05-22T06:15:41.200 回答
0

好处是您使用的是众所周知的、经过全面测试且可靠的代码。如果它用于 MS Windows 或 Linux 专有驱动程序,由构建您的 GPU 的人编写,因此可以假定知道如何使其真正快速。

小组项目的另一个好处是只有一种方法可以做到。关于您是否应该编写自己的 C++ 矩阵类、应该调用什么、要重载哪些运算符以及内部实现应该是 1D 还是 2D 数组,没有任何争论...

于 2012-05-22T07:11:59.127 回答