Sat*_*own 6 opengl stack matrix
我正在阅读OpenGL Superbible Fifth Edition,他们讨论通过他们自己的类使用堆栈.这一切都很棒,但他们提到矩阵堆栈已被弃用.为什么他们被弃用,人们使用什么而不是他们?
小智 9
原因是政治原因,而不是技术原因,可以追溯到21世纪初.
OpenGL 3是第一个愿意打破向后兼容性的版本.设计人员希望为专家用户,游戏程序员和高端可视化编码器创建API,他们了解着色器并编写自己的矩阵代码.目的是OpenGL 3 API应该与实际硬件非常接近.(即使在OpenGL 1/2中,矩阵堆栈通常在CPU端实现,而不是GPU.)
从游戏引擎程序员的角度来看,这更好.嘿,如果你不得不每两年开发一个新的游戏引擎,丢掉旧代码有什么大不了的?
该设计过程的结果是OpenGL 3/4核心配置文件.
一旦"新一代"OpenGL宣布,大学和公司中所有不那么专业的程序员都意识到他们会被搞砸.这些人(像我一样)教授3D图形或编写用于研究或设计的实用程序.我们不需要比普通环境漫反射镜面更高级的照明.我们经常需要将来自不同来源的代码混合在一起,这很容易,如果每个人都使用完全相同的矩阵,光照和纹理约定 - 就像OpenGL 2提供的那样.
此外,我听说但无法验证,大型CAD/CAM公司意识到他们也被搞砸了.当你付钱(和高薪:比较Quadro与GeForce,或FireGL与Radeon)客户的价格时,从十年的开发中扔掉200万行代码是不可取的.
所以NVIDIA和ATI都宣布他们会尽可能长时间地支持旧的API.
这种压力的结果是兼容性配置文件.OpenGL ARB现在似乎已经意识到虽然他们希望每个人都切换到核心配置文件但它不会发生:阅读OpenGL 4中的镶嵌着色器的扩展规范,并提到GL_PATCHES将与glBegin一起使用.
矩阵堆栈(以及其余矩阵函数)仅在核心配置文件中被弃用。在兼容性配置文件中,您应该仍然可以使用它们。
从我的角度来看,它被删除是因为大多数引擎/框架都有自定义数学代码和着色器统一样式,用于将矩阵发送到着色器。
虽然对于简单的程序/教程来说,使用和搜索其他东西是非常不方便的。
我建议使用: