OpenGL 3.2核心配置文件指南

时间:2010-09-19 15:51:23

标签: c++ opengl opengl-3

有人可以建议学习OpenGL 3.2核心配置文件的指南吗?

SDK难以阅读,我见过的大部分指南都只教授旧方法。

1 个答案:

答案 0 :(得分:28)

我不知道任何好的指南,但我可以快速总结一下

我假设您已经熟悉了着色器,顶点缓冲区等的基础知识。如果您不熟悉,我建议您首先阅读有关着色器的指南,因为所有OpenGL 3都基于使用着色器

初始化时:

  • 使用glGenBuffersglBindBuffer(GL_ARRAY_BUFFER, bufferID)glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)

  • 创建和填充顶点缓冲区
  • 索引缓冲区相同,但使用GL_ELEMENT_ARRAY_BUFFER代替GL_ARRAY_BUFFER

  • 除外
  • 创建纹理的方式与以前版本的OpenGL(glGenTexturesglBindTextureglTexImage2D

  • 完全相同
  • 使用glCreateShader创建着色器,使用glShaderSource设置其GLSL源代码,并使用glCompileShader进行编译;您可以使用glGetShaderiv(shader, GL_COMPILE_STATUS, &out)检查其是否成功,并使用glGetShaderInfoLog

  • 检索错误消息
  • 使用glCreateProgram创建程序(即一组绑定在一起的着色器,通常是一个顶点着色器和一个片段着色器),然后使用glAttachShader绑定所需的着色器,然后使用glLinkProgram链接该程序;就像着色器一样,您可以检查链接成功与glGetProgramglGetProgramInfoLog

当你想画画时:

  • 使用glBindBuffer分别使用参数GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFER绑定顶点和索引缓冲区

  • 使用glUseProgram

  • 绑定该程序
  • 现在,对于着色器中的每个变量变量,您必须调用glVertexAttribPointer,其语法类似于旧版glVertexPointerglColorPointer等功能,但其功能除外第一个参数,它是变化的标识符;可以通过在链接程序上调用glGetAttribLocation来检索此标识符

  • 对于着色器中的每个统一变量,您必须调用glUniform;它的第一个参数是统一变量的位置(也是一种标识符),您可以通过调用glGetUniformLocation来检索它(警告:如果您有一个名为“a”的数组,则必须使用“一个[0]“)

  • 对于要绑定的每个纹理,您必须使用glActiveTexture调用GL_TEXTUREi(我对每个纹理都不同),然后glBindTexture然后设置值我的制服

  • 致电glDrawElements

这是你必须要做的基本事情。当然还有其他东西,比如顶点数组对象,统一缓冲区等,但它们仅用于优化目的

其他领域,如剔除,混合,视口等,与旧版OpenGL大致相同

我还建议你学习this demo program(使用顶点数组对象)。最有趣的文件是main.cpp

希望这可以提供帮助