我应该使用 GL_COLOR_ARRAY 将颜色转换为 VBO 吗?我确实在我的代码中使用了它。除了将顶点转换为 VBO,我还使用了 GL_ARRAY_BUFFER。目的是将颜色和顶点变量传输到 VBO (GPU)。我很困惑,我做了一切来运行这个程序,但是
still gives me a segmentation fault.
GLuint vboIds[2];
QVector<QVector3D> vertices;
float* colors;
初始化:顶点数组的长度为(6 * ANGLE_COUNT=360 * RANGE_COUNT=100)
initializeGLFunctions();
// Generate 2 VBOs
glGenBuffers(2, vboIds);
// Transfer vertex data to VBO 0
glBindBuffer(GL_ARRAY_BUFFER, vboIds[0]);
glBufferData(GL_ARRAY_BUFFER, 6 * ANGLE_COUNT * RANGE_COUNT * sizeof(QVector3D), vertices.constData(), GL_STATIC_DRAW);
// Transfer index data to VBO 1
glBindBuffer(GL_COLOR_ARRAY, vboIds[1]);
glBufferData(GL_COLOR_ARRAY, 6 * ANGLE_COUNT * RANGE_COUNT * sizeof(GLushort), colors, GL_STATIC_DRAW);
到目前为止,我将顶点作为数组缓冲区初始化为提到的长度以及颜色缓冲区。
渲染功能:
glBindBuffer(GL_ARRAY_BUFFER, vboIds[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIds[1]);
int vertexLocation = shaderProgram->attributeLocation("vertex");
shaderProgram->enableAttributeArray(vertexLocation);
glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, 6 * ANGLE_COUNT * RANGE_COUNT * sizeof(vertices.constData()), (const void *)0);
int Color = shaderProgram->attributeLocation("color");
shaderProgram->enableAttributeArray(Color);
glVertexAttribPointer(Color, 2, GL_FLOAT, GL_FALSE, 6 * ANGLE_COUNT * RANGE_COUNT *sizeof(colors), 0);
//glDrawElements(GL_TRIANGLES, 6 * ANGLE_COUNT * RANGE_COUNT, GL_UNSIGNED_SHORT, 0);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
我不明白为什么这个程序无法运行。此外,当我将颜色和顶点传输到 VBO 时,想象现在我想更改颜色变量的某些索引的值,我该怎么做?