【问题标题】:Is it possible to change the color of an object with a variable in OpenGL?是否可以在 OpenGL 中使用变量更改对象的颜色?
【发布时间】:2018-06-23 03:17:33
【问题描述】:

假设我有一个名为

的变量
current_color

分配给 current_color 的字符串是不断变化的。

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

为了分配立方体的颜色,我使用了

glColor3fv((0, 1, 0))

有没有办法(参考颜色库)有

glColor3fv((current_color))

并且每次该变量更新时,它都会改变立方体的颜色?据我了解,OpenGL 是一个状态机,所以我需要重绘场景或立方体。你对如何做到这一点有什么建议吗?

【问题讨论】:

  • 每次更改数据(如颜色)时,都需要再次使用glColorxxx。为避免再次发生此类所有数据传输,您最好使用现代 OpenGL(版本 >= 3.2)并仅传递 uniform
  • @Ripi2 PyOpenGL 我相信只有 3.1
  • glColorxxx 是 OpenGL 1.1 的命令。如果您创建旧的 gl-context 或 向前兼容性 配置文件上下文,它仍然有效。
  • Pyopengl 包版本不等于 OpenGL 版本,后者取决于你的显卡。对于您使用这些“固定功能”命令显示的方法,您只需要清除并重绘场景。否则,如果您决定稍后使用基于着色器的方法,您应该按照@Ripi2 的建议进行操作。
  • 我刚刚找到了 ModernGL

标签: python-3.x opengl pyopengl


【解决方案1】:

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

顶点着色器

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;
}
  • 请注意,上面的代码只是一些帮助您入门的示例代码。

每次更新都必须渲染场景并将颜色传递给着色器。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多