Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不推荐使用的OpenGL函数_Opengl - Fatal编程技术网

不推荐使用的OpenGL函数

不推荐使用的OpenGL函数,opengl,Opengl,我目前正在通过第五本超级圣经学习OpenGL。它会教你核心档案。但我真的很困惑 我知道khronos在3.3中删除了固定函数管道,并宣布一些函数已弃用。但是Superbible现在只是用它们自己的函数替换那些不推荐使用的函数 为什么khronos要删除glRotate或matrixstack之类的东西,这样我就必须使用第三方库(或我自己的库)而不是官方库 也许superbible有缺陷?glRotate()等被删除,因为openGL内部处理矩阵,所以直接提供矩阵是一种更干净的设计 几乎所有具有任

我目前正在通过第五本超级圣经学习OpenGL。它会教你核心档案。但我真的很困惑

我知道khronos在3.3中删除了固定函数管道,并宣布一些函数已弃用。但是Superbible现在只是用它们自己的函数替换那些不推荐使用的函数

为什么khronos要删除glRotate或matrixstack之类的东西,这样我就必须使用第三方库(或我自己的库)而不是官方库

也许superbible有缺陷?

glRotate()等被删除,因为openGL内部处理矩阵,所以直接提供矩阵是一种更干净的设计

几乎所有具有任何复杂性的openGL应用程序都将执行一系列其他矩阵操作,并将拥有自己的矩阵类。openGL更容易获取结果,而不是坚持通过一系列旋转/平移/缩放调用创建它们


他们可以提供自己的矩阵类,但是有很多第三方LIB可以使用。openGL的一个策略(失败)是它确实依赖第三方LIB来完成实际图形之外的任何事情。因此,初学者程序是GLUT、GLEW、SDL等的复杂组合,可以在屏幕上显示任何内容,而DirectX则提供了所有现成的功能。

Khronos从核心配置文件中删除了这些功能,但它们仍然可以在兼容配置文件中使用。 主要原因之一是性能:

在当今的大多数应用程序中,渲染器和应用程序之间必须来回传递的信息量比十年前要大。因此,ARB提出了缓冲区(顶点数组和顶点缓冲区对象),以最大限度地利用主系统和渲染硬件之间的可用带宽。但是,如果您开始使用VBO机制来传输数据,那么大多数遗留函数将变得无用

这就是说,除了需要支持遗留应用程序(这是兼容性配置文件的充分理由)之外,我认为该API对于学习目的仍然有用


至于您的主要问题,上述内容仅适用于完整版本的OpenGL,而不适用于不支持旧原语的ES版本,在这种情况下,仿真层是必要的。

您的大多数问题都在这里得到了回答:“矩阵类”–否,他们不能这样做,因为这会将OpenGLAPI限制在开发这些类库的语言中。OpenGL与语言无关,只定义过程入口点应遵循主机系统的C调用约定。DirectX是一组库(包括用于图形的Direct3D),而OpenGL是一个库。该策略是一个陷阱,需要更多的样板代码/设置才能正常工作,但这是一个巨大的好处,因为它比Direct3D更具可移植性。@RobertRouhani缺乏可移植性只是因为DirectX只能从微软购买。没有任何技术可以阻止Khronos将SDL/GLEW类型的函数与openGLIt一起使用,正是因为这一政策,OpenGL被用于一切从智能手机到超级计算机。只是想精确说明OpenGL实际上只希望顶点着色器输出的顶点坐标在剪辑空间中。如何做到这一点取决于你自己(例如:使用矩阵、巫毒等)。