Должен ли я использовать GL_COLOR_ARRAY для преобразования цветов в VBO? Я использовал это в своем коде. Кроме того, для преобразования вершин в VBO я использовал GL_ARRAY_BUFFER. Целью является передача переменных цвета и вершин в VBO (GPU). Я смущен, я сделал все, чтобы запустить эту программу, ноOpenGL Vertex Buffer Object
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);
До сих пор, Я инициализировал вершины как буфер массива до указанной длины, а также буфер цветов.
Rendering Функция:
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 для меня, пожалуйста. –