c++ - 使用输入作为结构 vector 的数字?

标签 c++ opengl vector

<分区>

我有一个 vertex 结构,它存储一个顶点在二维平面中的位置,可以变换它的位置,还可以用来生成顶点以形成几何形状。我需要一个函数调用的参数来确定我需要多少这个结构我尝试使用数组但是这不起作用因为数组只接受常量变量并且我尝试了 vector 但是当我为顶点生成缓冲区时我不能使用 vector ,因为“没有从 vector 到 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);
}

最佳答案

根据 its manual page , glBufferData() 的第三个参数是一个const GLvoid *

那么,你想在这里做什么?

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

// ...

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

好吧,这就是你的问题。 vertextData 是一个 std::vectorstd::vector 无法神奇地将其自身转换为 native 指针。

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

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

此外,我从眼角余光注意到以下几点:

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

这也不对。此 for 循环的主体永远不会执行。

关于c++ - 使用输入作为结构 vector 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127968/

相关文章:

python - numpy 数组 C api

编译时的OpenGL问题

c++ - "vector<int> v[]"和 "vector<vector<int>> v"有什么区别

c++ - 在 odeint 中使用 std::vector<Eigen::Vector3d> 作为状态类型

C++自定义分配器: const_pointer 'has not been declared'

opengl - 绘制抗锯齿粗镶嵌曲线

opengl - 仅强制 OpenGL 核心配置文件

c++ - 生成时CMake错误。项目使用Boost库

c++ - Visual C++ 2010 - fatal error LNK1169 : one or more multiply defined symbols found

c++ - C++ 中的数组初始化(非字符串)