我的问题与我的另一个问题有关:How to render large number of similar objects?
我试图渲染一组点。有一点我使用这段代码:
glUseProgram(programId);
glUniformMatrix4fv(matrixId, 1, GL_FALSE, &(vp * getModelMatrix(pos, scale))[0][0]);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_POINTS, 0, 1);
glDisableVertexAttribArray(0);
我对点集的任务感到有些困惑。我为顶点分配了更多内存:
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, totalParticleCount * 3 * sizeof(GLfloat), gVertexBufferData, GL_STATIC_DRAW);
我使用此绘制调用进行渲染:
glDrawArrays(GL_POINTS, 0, totalParticleCount);
但我不明白我必须对glUniformMatrix4fv
函数使用哪种转换以及如何设置顶点。我试着这样做:
for (int i = 0; i < totalParticleCount; i++) {
gVertexBufferData[3 * i + 0] = hState[i].pos.x;
gVertexBufferData[3 * i + 1] = hState[i].pos.y;
gVertexBufferData[3 * i + 2] = hState[i].pos.z;
}
并设置统一矩阵:
glUniformMatrix4fv(matrixId, 1, GL_FALSE, &vp[0][0]);
在我的情况下,我什么也看不见,我无法理解什么是错的。
答案 0 :(得分:0)
这篇文章(https://gamedev.stackexchange.com/questions/90471/should-unbind-buffers)对我的情况非常有帮助。更新顶点后,我必须再次绑定VAO和VBO。现在我有了这个工作代码:
for (int i=0; i<totalParticleCount; i++) {
gVertexBufferData[3 * i + 0] = hState[i].pos.x;
gVertexBufferData[3 * i + 1] = hState[i].pos.y;
gVertexBufferData[3 * i + 2] = hState[i].pos.z;
}
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, totalParticleCount * 3 * sizeof(GLfloat), gVertexBufferData, GL_STATIC_DRAW);
glUseProgram(programId);
glUniformMatrix4fv(matrixId, 1, GL_FALSE, &vp[0][0]);