我正在用 C 语言编写一个程序,使用 OpenGL 来绘制一些图元(线、圆等)。我已经成功地使用缓冲区对象来存储图元的顶点,从而绘制它们。但我现在似乎被卡住了,因为我不知道如何设置它们的颜色。程序的一部分是老师给我的,所以我知道颜色属性必须使用这个结构来指定:
typedef struct {
float r;
float g;
float b;
float a;
} vec4;
我知道我应该使用 vec4 数组来存储颜色值,所以我声明了一个这样的变量。第一个是 vec2 数组,用于存储原始顶点。
vec2 vertices[10000];
vec4 colours[10000];
(据我了解)用于设置顶点缓冲区限制的函数如下所示:
void initShaders(void)
{
GLuint buffer;
GLuint loc;
GLuint vao;
/*Create and initialize a program object with shaders */
idProgram = initProgram("ass1vshader.glsl", "ass1fshader.glsl");
/*installs the program object as part of current rendering state */
glUseProgram(idProgram);
/*Creat a vertex array object */
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
/*Create buffer in the shared display list space and */
/* bind it as GL_ARRAY_BUFFER */
glGenBuffers( 1, &buffer);
glBindBuffer( GL_ARRAY_BUFFER, buffer);
glBufferData( GL_ARRAY_BUFFER, sizeof(vertex)+sizeof(colours), NULL,GL_STATIC_DRAW);
/*Initialize attribute vPosition in program */
loc = glGetAttribLocation( idProgram, "vPosition");
glEnableVertexAttribArray(loc);
glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)BUFFER_OFFSET(0));
/*Get location of the uniform attribute 'u_proj_matrix' */
idProjection = glGetUniformLocation(idProgram, "u_proj_matrix");
/*Set graphics attributes */
glLineWidth(3.0);
glPointSize(1.0);
glClearColor(1.0, 1.0, 1.0, 1.0);
}
如您所见,我已将顶点缓冲区大小初始化为“顶点”和“颜色”的组合大小。
我也了解到片段着色器在着色过程中起着重要作用。它看起来像这样:
#version 140
in vec4 color;
out vec4 fColor;
void
main()
{
fColor = color;
}
有人可以告诉我如何为我的图元赋予颜色吗?我希望我提供的信息是足够的。