【发布时间】:2013-06-25 13:32:37
【问题描述】:
我应该使用 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 时,想象现在我想更改颜色变量的某些索引的值,我该怎么做?
【问题讨论】:
-
谁能解决它。 否请在发帖前阅读规则和建议。
-
很难说你到底想做什么。关于颜色和顶点索引之间的差异似乎存在严重的混淆(但是可能会出现这种误解),除了 之外很难找到答案“请参阅适当的 OpenGL 学习资源以消除一些基本误解".
-
能否请您介绍一个合适的 OpenGL 资源给我。
-
在答案中查看我的代码,我添加了用于创建顶点的编码。因此,我想做的事情很明确。
-
@SamiraBayat 如果您的问题有更新,那么,请更新您的问题。答案不是 cmets。