2017-05-07 3 views
0

私はOpenGLを使用していますが、現在は頂点配列を渡しています。 私は頂点配列openGLとベクトル

GLfloat vertices[] = { 
    0.500000000f, 0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f, 
    0.500000000f, -0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f, 
    0.500000000f, 0.500000000f, -0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f}; 

ような配列でOpenGLを渡すとき、それが正常に実行される問題である私は、

std::vector<GLfloat> vertices = { 
    0.500000000f, 0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f, 
    0.500000000f, -0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f, 
    0.500000000f, 0.500000000f, -0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f}; 

のような配列の代わりにベクトルでそれを渡すときに、私に」私の窓の三角形を見ない。

私のコードはほとんどこの https://learnopengl.com/code_viewer.php?code=getting-started/coordinate_systems_with_depth

のようなもので、私は

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

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

この行を変更し、私は

// Position attribute 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0); 
    glEnableVertexAttribArray(0); 
    // TexCoord attribute 
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat))); 
    glEnableVertexAttribArray(2); 
これらの行を変更10

// Position attribute 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0); 
    glEnableVertexAttribArray(0); 
    // NormalVector attribute 
    glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat))); 
    glEnableVertexAttribArray(3); 

私は何か他のことをするために通常のベクトル情報が必要なためです。

誰かがstd :: vectorを正しく使用する方法を知っていますか?

ありがとうございました。

答えて

3

vectorを使用している場合は、sizeof(vertices)の代わりにvertices.size() * sizeof(GLfloat)を使用する必要があります。 sizeof演算子は、スタックに格納されているメモリのバイト数を返します。動的に割り当てられた配列のサイズではありません。

関連する問題