Python 3.x 是否可以在OpenGL中使用变量更改对象的颜色?

Python 3.x 是否可以在OpenGL中使用变量更改对象的颜色?,python-3.x,opengl,pyopengl,Python 3.x,Opengl,Pyopengl,假设我有一个变量,叫做 current_color 并且指定给当前颜色的字符串不断变化 另外,我在PyOpenGl.py中有一个立方体 要指定多维数据集的颜色,我使用 glColor3fv((0, 1, 0)) 有没有一种方法(引用颜色库)可以 每次变量更新时,它都会改变立方体的颜色?据我所知,OpenGL是一个状态机,所以我需要重新绘制场景或立方体。您有什么建议吗?您可以使用顶点着色器并将颜色作为统一变量传递给它。将当前颜色传递给frag着色器,如下所示 顶点着色器 uniform vec

假设我有一个变量,叫做

current_color
并且指定给当前颜色的字符串不断变化

另外,我在PyOpenGl.py中有一个立方体

要指定多维数据集的颜色,我使用

glColor3fv((0, 1, 0))
有没有一种方法(引用颜色库)可以


每次变量更新时,它都会改变立方体的颜色?据我所知,OpenGL是一个状态机,所以我需要重新绘制场景或立方体。您有什么建议吗?

您可以使用顶点着色器并将颜色作为统一变量传递给它。将当前颜色传递给frag着色器,如下所示

顶点着色器

uniform vec3 current_color;
out vec3 out_color;

void main(){
    out_color = current_color;
}
片段着色器

in out_color;
out frag_color;

void main{
    frag_color = out_color;
}
  • 请注意,上面的代码只是一些示例代码,可以帮助您入门
每次更新都必须渲染场景并将颜色传递给着色器


希望这有帮助。

每次更改数据(如颜色)时,都需要再次使用
glColorxxx
。为了避免再次进行此类数据传输,您最好转到现代OpenGL(版本>=3.2)并只传递一个统一的命令。@Ripi2 PyOpenGL仅在3.1版本,我相信GlColorXXX是OpenGL 1.1的命令。如果您创建旧的gl上下文或前向兼容配置文件上下文,它仍然有效。Pyopengl软件包版本不等于OpenGL版本,后者取决于您的图形卡。对于使用这些“固定功能”命令显示的方法,您只需要清除并重新绘制场景。否则,如果您以后决定使用基于着色器的方法,您应该按照@Ripi2的建议去做
in out_color;
out frag_color;

void main{
    frag_color = out_color;
}