2016-10-20 4 views
3

OpenGL에서 단일 구조체와 단일 VBO를 사용하여 객체에 색상을 추가하려고합니다. 이를 위해, 나는 그 다음과 같습니다 만든 Vertex 구조체를 가지고 :OpenGL VBO의 색상은 무엇입니까?

typedef struct { 
    float x; 
    float y; 
    float z; 
    float r; 
    float g; 
    float b; 
    float a; 
} Vertex; 

내가 테스트를 실행하기 때문에 이미 내가 원하는 것을 얻을 좌표 정확하게 모든 색상을 설정하고있어 알고 내 목록에 저장 한 각 객체를 반복하고 점을 그리고 glVertex3fglColor4f을 사용하여 색상을 설정합니다 (이는 내가 찾고있는 것보다 훨씬 느립니다). 그러나 VBO를 사용하여 그릴하려고 할 때 나는 모든 곳의 색 삼각형이 엉망이되었습니다.

VBO를 끌어 내 렌더링 루프의 일부는 다음과 같습니다 : 내가 잘못 뭐하는 거지

glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, NULL); 
glEnableClientState(GL_COLOR_ARRAY); 
glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL); 
glDrawArrays(GL_TRIANGLES, 0, vertex_amount); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

? 당신이 stride에 대한 0을 사용할 수 있도록 Vertex의 배열에

답변

4
glVertexPointer(3, GL_FLOAT, 0, NULL); 
          ^

위치 값은 단단히 포장하지 않습니다. sizeof(Vertex)을 사용하십시오.

glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL); 
          ^^^^^^^^^^^^^^^^^^^ 

나는 당신이 여기서 무엇을 할 것인지 잘 모르겠다. 아마도 glVertexPointer()/glColorPointer()의 세 번째 매개 변수는 stride 대신 pointer이라고 생각했을 것입니다. offsetof()을 최종 매개 변수 pointer으로 이동하십시오. 모두 함께

:

glVertexPointer(3, GL_FLOAT, sizeof(Vertex), offsetof(Vertex, x)); 
glColorPointer(4, GL_FLOAT, sizeof(Vertex), offsetof(Vertex, r)); 

당신은 offsetof()을 구현 한 방법에 따라 void*pointer 매개 변수 값을 캐스팅 할 수 있습니다.

관련 문제