C++ 使用C++;glVertexPointer OpenGL函数中的std::Vector

C++ 使用C++;glVertexPointer OpenGL函数中的std::Vector,c++,opengl,C++,Opengl,我有一个浮点数向量,这个向量描述了一组三角形,每个三角形用18个浮点数来描述,前3个是第一个顶点,后3个是最后一个顶点的法线,依此类推3次,直到描述每个三角形 我正在使用 std::vector< GLfloat > 这段代码实际上是有效的,但在某些时刻,我用新的三角形重新创建了浮动向量,它可以是更多或更少的三角形 void Visualizer::draw3dModel() { glEnableClientState(GL_NORMAL_ARRAY); glEna

我有一个浮点数向量,这个向量描述了一组三角形,每个三角形用18个浮点数来描述,前3个是第一个顶点,后3个是最后一个顶点的法线,依此类推3次,直到描述每个三角形

我正在使用

std::vector< GLfloat >
这段代码实际上是有效的,但在某些时刻,我用新的三角形重新创建了浮动向量,它可以是更多或更少的三角形

void Visualizer::draw3dModel()
{
    glEnableClientState(GL_NORMAL_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);

    glNormalPointer(GL_FLOAT, 6 * sizeof(GLfloat), this->vertexes->data() + 3);
    glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), this->vertexes->data());

    glPushMatrix();

        glScalef(0.05f, 0.05f, 0.05f);
        glColor3f(1,1,1);

        glDrawArrays(GL_TRIANGLES, 0, this->vertexes->size());

    glPopMatrix();

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
}
在创建新三角形之前,我使用以下函数清除顶点向量

std::vector< GLfloat >* MarchingCubesThread::getTriangles(float minvalue_scale)
{
    this->generateTriangles(minvalue_scale);

    for(unsigned int i=0; i < this->num_triangles; i++)
    {
        for(int j=0; j < 3; j++)
        {   
            this->vertexes.push_back(this->triangles[i].p[j].x);
            this->vertexes.push_back(this->triangles[i].p[j].y);
            this->vertexes.push_back(this->triangles[i].p[j].z);

            this->vertexes.push_back(this->triangles[i].norm.x);
            this->vertexes.push_back(this->triangles[i].norm.y);
            this->vertexes.push_back(this->triangles[i].norm.z);
        }
    }

    return &(this->vertexes);
}

void MarchingCubesThread::generateTriangles(float minvalue_scale)
{
    this->vertexes.clear();
    this->triangles.clear();

    this->triangles = MarchingCubesDataset(this->dataset->getMaxVal() * minvalue_scale, *(this->dataset), LinearInterp, this->num_triangles);   
}
以下是连续几次截图:

关于这里发生的事情有什么线索吗?谢谢

PD:对于完整的源代码,这是github上的公共git存储库:

glDrawArrays
要求的不是缓冲区中的浮点数,而是顶点数。 所以正确的电话应该是:

glDrawArrays(GL_TRIANGLES, 0, this->vertexes->size() / 6);

通过让
glDrawArrays
绘制6倍以上的顶点,您在有效向量数据结束后显示了垃圾,有时是上一次迭代的数据。

编辑代码以使用您的建议,但在执行时引发以下错误:英特尔刷新锁定失败:参数列表也太长,如果你想偷袭,我添加了github上托管的源代码的链接;)aaawwww,我发现,我在开始时制作了一个空向量的->顶点->大小(),现在我强制创建三角形,然后渲染,现在可以了!,非常感谢。
glDrawArrays(GL_TRIANGLES, 0, this->vertexes->size() / 6);