有人可以建议学习OpenGL 3.2核心配置文件的指南吗?
SDK难以阅读,我见过的大部分指南都只教授旧方法。
答案 0 :(得分:28)
我不知道任何好的指南,但我可以快速总结一下
我假设您已经熟悉了着色器,顶点缓冲区等的基础知识。如果您不熟悉,我建议您首先阅读有关着色器的指南,因为所有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
创建着色器,使用glShaderSource
设置其GLSL源代码,并使用glCompileShader
进行编译;您可以使用glGetShaderiv(shader, GL_COMPILE_STATUS, &out)
检查其是否成功,并使用glGetShaderInfoLog
使用glCreateProgram
创建程序(即一组绑定在一起的着色器,通常是一个顶点着色器和一个片段着色器),然后使用glAttachShader
绑定所需的着色器,然后使用glLinkProgram
链接该程序;就像着色器一样,您可以检查链接成功与glGetProgram
和glGetProgramInfoLog
当你想画画时:
使用glBindBuffer
分别使用参数GL_ARRAY_BUFFER
和GL_ELEMENT_ARRAY_BUFFER
绑定顶点和索引缓冲区
使用glUseProgram
现在,对于着色器中的每个变量变量,您必须调用glVertexAttribPointer
,其语法类似于旧版glVertexPointer
,glColorPointer
等功能,但其功能除外第一个参数,它是变化的标识符;可以通过在链接程序上调用glGetAttribLocation
来检索此标识符
对于着色器中的每个统一变量,您必须调用glUniform
;它的第一个参数是统一变量的位置(也是一种标识符),您可以通过调用glGetUniformLocation
来检索它(警告:如果您有一个名为“a”的数组,则必须使用“一个[0]“)
对于要绑定的每个纹理,您必须使用glActiveTexture
调用GL_TEXTUREi
(我对每个纹理都不同),然后glBindTexture
然后设置值我的制服
致电glDrawElements
这是你必须要做的基本事情。当然还有其他东西,比如顶点数组对象,统一缓冲区等,但它们仅用于优化目的
其他领域,如剔除,混合,视口等,与旧版OpenGL大致相同
我还建议你学习this demo program(使用顶点数组对象)。最有趣的文件是main.cpp
希望这可以提供帮助