【问题标题】:How to use OpenGL and GLSL to change color (C++)?如何使用 OpenGL 和 GLSL 改变颜色(C++)?
【发布时间】:2011-12-12 01:18:42
【问题描述】:

我正在使用 C++ 编写一个 OpenGL 项目,我想学习如何使用 GLSL 着色器。问题是,虽然我可以在不使用自己的着色器的情况下完成我的程序,但我想编写自己的(此时没有我自己加载的着色器 - 不确定 OpenGL 是否默认任何着色器)。

要在图像上绘制一堆线(其顶点存储在一个向量中,颜色值存储在另一个向量中),我使用以下代码运行并在帧更新时渲染它们 - 我使用GLUT 显示函数。

glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);  
vector<point2>::iterator it;
int c_index = 0;
for(it=points.begin(); it<points.end(); it++){
    if(c_index % 2 == 0) //set color for every pair of points (each line)
        glColor3f(colors[c_index/2][0], colors[c_index/2][1], colors[c_index/2][2]);
    c_index++;

    glVertex2f(it->x, it->y); //set vertex
}
glEnd();
glFlush();

现在,问题是当我尝试使用在另一个示例程序中找到的着色器时,颜色全是红色(即使着色器没有明确定义任何颜色)。它也让 glColor3f 什么也不做。

我的问题是,假设我可以使用着色器来执行此操作,那么着色器必须是什么样的,我将如何加载它们?

【问题讨论】:

  • 您使用的是什么版本的 GLSL? (如果您的着色器代码中没有使用#version,它可能是 GLSL 1.10。)
  • 当涉及到着色器时,这个特殊的代码 sn-p 是没有意义的。我们需要看的代码是着色器本身、着色器对象创建代码以及统一和属性绑定。

标签: c++ opengl glsl glut shader


【解决方案1】:

显然它不能使用 glColor3f 来完成。相反,我必须制作一个预先确定的 OpenGL 缓冲区,并将缓冲区数据发送到着色器。它不能像我希望的那样“即时”完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多