任何人都可以建议学习 OpenGL 3.2 核心配置文件的指南吗?
SDK很难阅读,而且我看到的大多数指南都只教授旧方法。
我不知道有什么好的指南,但我可以给你一个快速的总结
我假设您已经熟悉着色器、顶点缓冲区等的基础知识。如果您不熟悉,我建议您先阅读有关着色器的指南,因为所有 OpenGL 3 都是基于着色器的使用
初始化时:
glGenBuffers
使用和创建并填充顶点glBindBuffer(GL_ARRAY_BUFFER, bufferID)
缓冲区glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)
索引缓冲区相同,除了您使用GL_ELEMENT_ARRAY_BUFFER
而不是GL_ARRAY_BUFFER
像在以前版本的 OpenGL ( glGenTextures
, glBindTexture
, glTexImage2D
)中一样创建纹理
使用 创建着色器glCreateShader
,使用 设置它们的 GLSL 源代码,并使用;glShaderSource
编译它们 glCompileShader
您可以检查它是否成功glGetShaderiv(shader, GL_COMPILE_STATUS, &out)
并使用检索错误消息glGetShaderInfoLog
使用 来创建程序(即一组绑定在一起的着色器,通常是一个顶点着色器和一个片段着色器)glCreateProgram
,然后绑定您想要使用的着色器glAttachShader
,然后使用;链接程序。glLinkProgram
就像着色器一样,您可以检查链接是否glGetProgram
成功glGetProgramInfoLog
当你想画画时:
分别使用glBindBuffer
with 参数GL_ARRAY_BUFFER
和绑定顶点和索引缓冲区GL_ELEMENT_ARRAY_BUFFER
将程序与glUseProgram
现在对于着色器中的每个可变变量,您必须调用glVertexAttribPointer
其语法类似于传统glVertexPointer
的 ,glColorPointer
等函数,除了它的第一个参数是可变的标识符;可以通过调用glGetAttribLocation
链接程序来检索此标识符
对于着色器中的每个统一变量,您必须调用glUniform
; 它的第一个参数是统一变量的位置(也是一种标识符),您可以通过调用来检索它glGetUniformLocation
(警告:如果您有一个名为“a”的数组,则必须使用“a [0]”调用该函数)
对于要绑定的每个纹理,您必须调用glActiveTexture
with GL_TEXTUREi
(每个纹理的 i 不同),然后glBindTexture
将制服的值设置为 i
称呼glDrawElements
这是你必须做的基本事情。当然还有其他东西,比如顶点数组对象、统一缓冲区等,但它们仅用于优化目的
其他领域,如剔除、混合、视口等,与旧版本的 OpenGL 基本相同
我还建议您研究这个演示程序(它使用顶点数组对象)。最有趣的文件是 main.cpp
希望这可以帮助