我正在学习OpenGL,用Qt5重写一些遗留代码。他们使用glSecondaryColorPointerEXT()。在常用视频卡中检查当前对OpenGL的支持后,我选择了Qt5的类QOpenGLFunctions_3_2_Core来访问OpenGL函数。
该功能是否有OpenGL 3.2版本或替换方法?
答案 0 :(得分:2)
在OpenGL 3.2中,你应该使用着色器,此时你应该避免像gl_SecondaryColor
这样的遗留功能。在基于着色器的引擎中适当替换二次颜色只是一个额外的通用顶点属性。我解释了与OpenGL ES 2.0相关的very similar question,我的回答可能会有所帮助。
简而言之,glVertexPointer (...)
,glColorPointer (...)
,glSecondaryColorPointer{EXT} (...)
在OpenGL 3.0中都已弃用。在3.2核心环境中,您根本无法使用它们。因此,您需要学习着色器和glVertexAttribPointer (...)
。
在核心GL 3.2中使用“主要”和“次要”顶点颜色的顶点着色器看起来像这样:
#version 150 core
uniform mat4 mvp;
in vec4 vtx_pos;
in vec4 vtx_color1;
in vec4 vtx_color2;
out vec4 color;
void main (void) {
gl_Position = mvp * vtx_pos;
color = vtx_color1 * vtx_color2; // It is up to you to decide what to do
// with the primary and secondary
// colors, this is just for show...
}
您可以使用glVertexAttribPointer (...)
使用从GLSL顶点着色器查询的属性位置(链接后)向vtx_pos,vtx_color1和vtx_color2提供数据。而这一切完全取消了对glSecondaryColorPointerEXT (...)
的需求。