2017-05-07 1 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); 
,536,913,632 변경

// 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); 

에 10

나는 다른 뭔가를 할 수있는 법선 벡터 정보가 필요하기 때문이다.

누군가 std :: vector를 올바르게 사용하는 방법을 알고 있습니까?

감사합니다.

답변

3

vector을 사용하는 경우 sizeof(vertices) 대신 vertices.size() * sizeof(GLfloat)을 사용해야합니다. sizeof 연산자는 스택에 포함 된 동적으로 할당 된 배열의 크기가 아니라 vector이 차지하는 메모리의 바이트 수를 제공합니다.