いくつかのプリミティブ(線、円など)を描画するために、OpenGLを使用してCでプログラムを作成しています。バッファオブジェクトを使用してプリミティブの頂点を格納することに成功しました。したがって、それらを描画することに成功しました。でも、色の設定方法がわからないので、今は行き詰まっているようです。プログラムの一部は私の先生から提供されたので、色の属性は次の構造を使用して指定する必要があることを知っています。
typedef struct {
float r;
float g;
float b;
float a;
} vec4;
色の値を格納するためにvec4配列を使用することになっているので、そのような変数を1つ宣言しました。1つ目は、プリミティブ頂点を格納するために使用される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);
}
ご覧のとおり、頂点バッファサイズを「vertex」と「colors」の合計サイズに初期化しました。
また、フラグメントシェーダーがカラーリングプロセスで重要な役割を果たしていることも理解できます。次のようになります。
#version 140
in vec4 color;
out vec4 fColor;
void
main()
{
fColor = color;
}
プリミティブに色を付ける方法を教えてもらえますか?私が提供した情報が十分であることを願っています。