私は012d構造体を持っています。構造体は2d平面に頂点の位置を格納し、その位置を変換することができ、また頂点を生成して幾何学的形状を作るためにも使用されます。私は関数呼び出しの1つのパラメータが必要ですこの構造体のどれが私は配列を使用しようとする必要がありますが配列の唯一のconst変数を受け入れると私はベクトルを試みたが、しかし私は、私は "ベクトルからconst voidへの変換はありません"というようにベクトルを使うことはできません。structのベクトルにinputをnumberとして使用しますか?
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);
}
「void * vertexData = malloc(sizeof(Vertex)* verticesNum);」のような、必要なすべての頂点オブジェクトに合わせて十分なスペースを割り当てるためにmallocを使用できます。 – iedoc
申し訳ありませんが、void *の代わりに、おそらくVertex *、 "Vertex * vertexData =(Vertex *)malloc(sizeof(Vertex)* verticesNum);" – iedoc
@iedocこれはSPARTAです! errrrr ... C++。とにかく、ここでは 'new Vertex [verticesNum]'を使用します。これは、OPのように、std :: vector vertexData(verticesNum);です。 OPは 'vector'を間違って使用しようとしました。 'malloc'はその場所を持っていますが、C++では、奇妙なエッジケースの周辺には出ていません。静的に割り当てられた配列 'std :: array'、' std :: vector'、 'new'、そして最後に' malloc'のために行ってください。 –
user4581301