OpenGL-从外部文件绘制点

时间:2019-12-19 13:12:01

标签: c++ opengl visual-c++ freeglut opengl-compat

AM试图从CSV文件中绘制一些点。由于文件大小较大(> 2GB),因此将文件内容加载到向量std::vector<std::vector<std::string> >parsedCsv时会出现内存不足异常。

所以我想,可以将文件直接从CSV进行绘制,而不是将文件读取为矢量然后进行绘制。我正在寻找下面glVertex3f(x,y,z)

上的一些修改
    std::ifstream  data("D:\\Files\\Dummy2.csv");
    std::string line;
    while (std::getline(data, line))
    {
        std::stringstream lineStream(line);
        std::string cell;
        std::vector<std::string> parsedRow;
        while (std::getline(lineStream, cell, ','))
        {
            glBegin(GL_POINTS);
            glColor3f(0.0f, 1.0f, 1.0f);
            glVertex3f(----how to represent the points--?)
            glEnd();
        }

CSV文件已经具有所需的格式:

x1,y1,z1    
x2,y2,z2    
x3,y3,z3    
-------
----
--  

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用stof将字符串值转换为浮点数。将单元格编号推入vector。顶点顶点坐标的分量存储在vector中,并且可以由glVertex3fv绘制:

std::ifstream data("D:\\Files\\Dummy2.csv");
std::string line;
while (std::getline(data, line))
{
    std::stringstream lineStream(line);

    std::string cell;
    std::vector<float> parsedRow;
    while (std::getline(lineStream, cell, ','))
        parsedRow.push_back(std::stof(cell));

    if (parsedRow.size() == 3)
    {
        glBegin(GL_POINTS);
        glColor3f(0.0f, 1.0f, 1.0f);
        glVertex3fv(parsedRow.data());
        glEnd();
    }
}

请注意,如果stof无法执行转换,则会引发无效的参数异常。