如何使用一个 VBO 绘制一组点?
How to draw set of point using one VBO?
我的问题与我的另一个问题有关:
我正在尝试渲染一组点。有一点我使用这段代码:
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]);
在我的情况下,我什么也没看到,我不明白哪里出了问题。
这个 post (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]);
我的问题与我的另一个问题有关:
我正在尝试渲染一组点。有一点我使用这段代码:
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]);
在我的情况下,我什么也没看到,我不明白哪里出了问题。
这个 post (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]);