使用输入作为结构向量的数字?

时间:2016-05-10 01:40:39

标签: c++ opengl vector

我有一个vertex结构,用于存储顶点在2d平面中的位置,并且可以转换其位置,还可以用于生成顶点以形成几何形状。我需要其中一个函数调用的参数,以确定我需要多少这个结构我尝试使用数组,但这不起作用,因为数组只接受const变量,我尝试向量,但当我生成顶点的缓冲区我不能使用向量作为“没有从向量到const void的转换”这里是函数。

void Sprite::init(Type mode, int verticesNum, float scale) {
    //generate buffer if it hasn't been generated
    if (_vboID == 0) {
        glGenBuffers(1, &_vboID);
    }
    //make vector of structs using verticesNum as how many vertices are needed
    std::vector<Vertex> vertexData(verticesNum);

    if (mode == Type::CIRCLE) {
        for (int i = verticesNum; i < verticesNum; i++) {
            float angle = (M_PI / 180) * i;
            vertexData[i].setPosition(cos(angle)*scale, sin(angle)*scale);
        }
    }

    //Tell opengl to bind our vertex buffer object
    glBindBuffer(GL_ARRAY_BUFFER, _vboID);
    //Upload the data to the GPU
    //this line is where i get the error as it can't use vertex data
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), /*right here*/vertexData/*to be more specific*/, GL_STATIC_DRAW);

    //Unbind the buffer
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

1 个答案:

答案 0 :(得分:2)

根据its manual pageglBufferData()的第三个参数是const GLvoid *

那么,你想在这做什么?

std::vector<Vertex> vertexData(verticesNum);

// ...

glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);

嗯,这是你的问题。 vertextDatastd::vectorstd::vector无法将其自身神奇地转换为本机指针。

您可能正在尝试将指针传递给向量的第一个元素。如果是这样,那么应该是:

glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), &vertexData[0], GL_STATIC_DRAW);

另外,我注意到以下几点,从我的一角开始:

for (int i = verticesNum; i < verticesNum; i++) {

这也不对。 <{1}}循环的主体永远不会执行。