我正在用 Qt5 重写一些遗留代码来学习 OpenGL。他们使用 glSecondaryColorPointerEXT()。在检查了常用视频卡中对 OpenGL 的当前支持后,我选择了 Qt5 的类QOpenGLFunctions_3_2_Core来访问 OpenGL 函数。
此功能是否有 OpenGL 3.2 版本或替换方法?
我正在用 Qt5 重写一些遗留代码来学习 OpenGL。他们使用 glSecondaryColorPointerEXT()。在检查了常用视频卡中对 OpenGL 的当前支持后,我选择了 Qt5 的类QOpenGLFunctions_3_2_Core来访问 OpenGL 函数。
此功能是否有 OpenGL 3.2 版本或替换方法?
在 OpenGL 3.2 中,您应该使用着色器,此外,此时您应该避免使用gl_SecondaryColor
. 在基于着色器的引擎中适当替换辅助颜色只是一个附加的通用顶点属性。我解释了一个与 OpenGL ES 2.0 相关的非常相似的问题,我的回答可能会有所帮助。
简而言之,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 (...)
.