如何使用 OpenGL 和 GLSL 改变颜色(C++)?
Posted
技术标签:
【中文标题】如何使用 OpenGL 和 GLSL 改变颜色(C++)?【英文标题】:How to use OpenGL and GLSL to change color (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 是没有意义的。我们需要看的代码是着色器本身、着色器对象创建代码以及统一和属性绑定。 【参考方案1】:显然它不能使用 glColor3f 来完成。相反,我必须制作一个预先确定的 OpenGL 缓冲区,并将缓冲区数据发送到着色器。它不能像我希望的那样“即时”完成。
【讨论】:
以上是关于如何使用 OpenGL 和 GLSL 改变颜色(C++)?的主要内容,如果未能解决你的问题,请参考以下文章