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_Shader_Specifications - Fatal编程技术网

更新的OpenGL规范-比着色器更多?

更新的OpenGL规范-比着色器更多?,opengl,shader,specifications,Opengl,Shader,Specifications,我几乎完全在2规范中编写OpenGL,对3和4规范了解不多。 我在某个论坛上读到,OpenGL的后期规范基本上只是将数据提供给着色器,着色器完成所有实际工作。 这将与我所理解的OpenGL形成鲜明对比,而着色器作为照明、水和其他效果的辅助工具 我充其量对着色器有一个非常基本的了解,如果在前面提到的任何主题中被证明是错误的,我也不会感到惊讶。我只是想了解更多 谢谢我认为几何很简单。我们已经把几何学打死了。引擎的存在可以很好地处理几何图形 现在,真正的挑战是如何使几何体看起来更逼真?这种工作(最好)

我几乎完全在2规范中编写OpenGL,对3和4规范了解不多。 我在某个论坛上读到,OpenGL的后期规范基本上只是将数据提供给着色器,着色器完成所有实际工作。 这将与我所理解的OpenGL形成鲜明对比,而着色器作为照明、水和其他效果的辅助工具 我充其量对着色器有一个非常基本的了解,如果在前面提到的任何主题中被证明是错误的,我也不会感到惊讶。我只是想了解更多


谢谢

我认为几何很简单。我们已经把几何学打死了。引擎的存在可以很好地处理几何图形


现在,真正的挑战是如何使几何体看起来更逼真?这种工作(最好)是使用着色器完成的,因此这就是该专业的重点所在。

当前的OpenGL规范仍然像以前一样处理大部分相同的几何体。它们不再(自动)处理在着色器中相当容易完成的事情。例如,它们不再自动在顶点颜色之间插值以获得每个像素的颜色。插值硬件仍然存在,因此着色器很简单,但仍然是必要的。

您的理解是正确的。在OpenGL 3.0中,几乎所有的固定功能都不赞成使用着色器。甚至可以从着色器访问的内置内容也不推荐使用,例如模型视图/投影矩阵、顶点坐标、法线、灯光等

基本工作流程应如下所示:

  • 通过VBOs加载几何体和逐顶点属性
  • 加载纹理、着色器
  • 通过制服将矩阵、灯光等内容传递给着色器
  • 通过常规属性数组(在VBOs中)传递逐顶点值,如顶点坐标、纹理坐标、法线
  • 调用
    glDrawElements
    glDrawArrays

因此,您将要进行的大多数OpenGL调用都只是推送通用数据。您将调用像
glUniform4f
这样的通用函数,而不是像
glLightfv
这样的状态函数

如果您已经在使用着色器,则不会有太多更改。您遇到了一些缺失的内容,在渲染代码中添加一个矩阵乘法,并在着色器中添加两行(或者更可能是半行),这样生活就会继续

如果你像我一样愚蠢到试图使用OpenGL进行高效的工作(即以高帧速率渲染科学数据,而不是玩游戏),那么你会受到一点伤害。您将需要编写(我的意思是剪切+粘贴一个示例)几十行着色器代码来替换固定的函数管道,以及近一百行设置代码来编译、链接和激活这些着色器(以及调试输出,您不会在第一次尝试时获得正确的结果)

在这两种情况下,仍然没有任何效果。然后你发现你需要绑定一个VAO。实际上,您不需要对它做任何事情(除非您想使用多个VAO进行状态管理),您只需要一个,因为没有它,其他属性/VBO都无法工作


但是,当您完成后,您可以开始考虑使用着色器或OpenCL集成GPGPU计算,并将数据交给图形内存进行渲染。

我看不出以高帧速率渲染科学数据与以高帧速率渲染游戏地形有何不同。两者都受益于固定功能管道的拆除。。科学应用程序更是如此,因为你可能只需要一个非常简单的管道就可以逃脱。否决票是为了不必要的反赌博。@Sinoth:反赌博?你的意思是说这不是“生产性的”?这是事实,不是挖苦。我和下一个极客一样喜欢电脑游戏。仔细阅读,你会发现我从未说过科学数据不会从可编程管道中受益,我说的恰恰相反。但在GPGPU之前,科学数据没有太多理由使用着色器。粒子效果、雾等在游戏中都很常见,但在专业绘图中却不常见。@Ben:“高效”是一个充满活力的词。。在这种含糊不清的情况下很难声称事实或观点。对不起,我把话塞进你嘴里了。这篇文章的负面语气让我得出了这样的结论:投票支持对VAO的咆哮。是的,OpenGL实际上比以前更难学(但一旦第一道屏障消失,使用起来就更容易了)@Ben:你确定VAO的事吗?不管怎样,我现在到处都在使用VAO,因为至少对我来说(用大量开关做非生产性工作),它们是有史以来最好的发明,为我省去了很多麻烦。然而,我非常确定,不绑定一个(即使用null VAO)曾经也可以很好地工作。这是否取决于您是否选择某个特定的配置文件?