我正在尝试可视化非常大的点云(7 亿点),并且在glDrawArrays
调用调试器时抛出访问冲突写入位置异常。我正在使用相同的代码来渲染更小的云(1 亿)并且一切正常。我还有足够的 RAM 内存 (32GB) 来存储数据。
要存储点云,我正在使用std::vector<Point3D<float>>
Point3D 所在的位置
template <class T>
union Point3D
{
T data[3];
struct{
T x;
T y;
T z;
};
}
顶点数组和缓冲区初始化:
glBindVertexArray(pxCloudHeader.uiVBA);
glBindBuffer(GL_ARRAY_BUFFER, pxCloudHeader.xVBOs.uiVBO_XYZ);
glBufferData(GL_ARRAY_BUFFER, pxCloudHeader.iPointsCount * sizeof(GLfloat) * 3, &p3DfXYZ->data[0], GL_STREAM_DRAW);
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
绘图调用:
glBindVertexArray(pxCloudHeader.uiVBA);
glDrawArrays(GL_POINTS, 0, pxCloudHeader.iPointsCount); // here exception is thrown
glBindVertexArray(0);
我还检查了是否抛出了 OpenGL 错误,但我没有发现任何错误。