2016-05-10 14 views
0

私は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); 
} 
+0

「void * vertexData = malloc(sizeof(Vertex)* verticesNum);」のような、必要なすべての頂点オブジェクトに合わせて十分なスペースを割り当てるためにmallocを使用できます。 – iedoc

+0

申し訳ありませんが、void *の代わりに、おそらくVertex *、 "Vertex * vertexData =(Vertex *)malloc(sizeof(Vertex)* verticesNum);" – iedoc

+0

@iedocこれはSPARTAです! errrrr ... C++。とにかく、ここでは 'new Vertex [verticesNum]'を使用します。これは、OPのように、std :: vector vertexData(verticesNum);です。 OPは 'vector'を間違って使用しようとしました。 'malloc'はその場所を持っていますが、C++では、奇妙なエッジケースの周辺には出ていません。静的に割り当てられた配列 'std :: array'、' std :: vector'、 'new'、そして最後に' malloc'のために行ってください。 – user4581301

答えて

2

its manual pageによれば、glBufferData()の三番目のパラメータがconst GLvoid *あります。

ここで何をしようとしていますか?

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

// ... 

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

問題があります。 vertextDatastd::vectorです。 std::vectorは魔法のように自分自身をネイティブポインタに変換することはできません。

おそらく、ベクトルの最初の要素へのポインタを渡そうとしています。もしそうなら、これは次のようになります。

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

また、私は私の目のコーナーの外に、次のように気づいた:

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

これはどちらか、右にすることはできません。このforループの本体は決して実行されません。

+0

ああ、申し訳ありません。コードをコピーしている間に作成したタイプのループです。実際には0に設定されています。あなたは提案作品です – zee

関連する問題