2011-05-13 3 views
0

저는 OPENGL ES를 iOS 용으로 사용하고 있습니다. 그러나 이것은 OPENGL 시나리오에 적용될 수 있습니다. 나는 꼭지점 배열을 가지고 있지만 그 중 일부만 그려야한다. 다음 예제에서는 첫 번째 점에서 두 번째 점까지 줄을 그 다음 네 번째 점에서 다섯 번째 점까지 선을 그립니다. 그러나 "inbetween"3 포인트가 그려지며 5 포인트가 아닙니다. 나는 확실한 무엇인가를 놓치고있는 I 'm를 정말로 확신한다, 나는 바른 방향 (감사)에서 찔레를 바르게 평가할 것이다! 코드에서glVertexPointer - 불필요한 라인을 그려야합니다.

 float xy[] = { 
     10.0f, 10.0f, 
     110.0f, 10.0f, 
     210.0f, 210.0f, 
     310.0f, 210.0f, 
     110.0f, 120.0f, 
     210.0f, 310.0f 
    }; 

    glClearColor(0.2f, 0.5f, 0.4f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    for(int i = 0; i < 2; i++) { 

     glEnableClientState(GL_VERTEX_ARRAY); 
     int from = (i * 6); 

     glVertexPointer(2, GL_FLOAT, 0, &xy[0]); 
     glDrawArrays(GL_LINE_STRIP, from, 4); 
     glDisableClientState(GL_VERTEX_ARRAY); 

    }; 

답변

3

만 glDrawArrays의 마지막 매개 변수는 정점 개수가 아닌 구성 요소 (플로트) 수입니다 대신 4의 각 반복에서 2 개 정점을 그릴 수 있습니다.

또한 루프 없이도 적은 노력/코드/시간으로 동일한 결과를 얻을 수 있습니다. 그리려는 정점의 인덱스를 포함하는 인덱스 배열을 만든 다음 glDrawArrays 대신 glDrawElements를 사용합니다.

float xy[] = { ... }; 
int indices[] = { 0, 1, 3, 4 }; 

glClearColor(...); 
glClear(...); 
glVertexPointer(...); 
glEnableClientState(...); 
glDrawElements(GL_LINES, 4, GL_UNSIGNED_INT, indices); 
+0

안녕하세요, 많은 감사합니다. 매우 도움이됩니다. –

관련 문제