2012-02-29 3 views
1

이 메서드는 posCoords 배열의 좌표를 준비합니다. 그것은 30 %의 시간 동안 제대로 작동하고, 나머지 70 %는 처음 몇 개의 삼각형이 그리드에 엉망이됩니다. 전체 표가 GL_TRIANGLE_STRIP을 사용하여 그려집니다. 나는 무엇이 잘못 됐는지 알아 내려고 노력하면서 내 머리카락을 꺼냈다. 어떤 아이디어? 삼각형으로 enter image description hereGL_TRIANGLE_STRIP 및 정점 배열 오류

if(!ES2) { 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
} 

int cols = floor(SCREEN_WIDTH/blockSize); 
int rows = floor(SCREEN_HEIGHT/blockSize); 
int cells = cols*rows; 
NSLog(@"Cells: %i", cells); 
coordCount = /*Points per coordinate*/2 * /*Coordinates per cell*/ 2 * cells + /* additional coord per row */2*2*rows; 

NSLog(@"Coord count: %i", coordCount); 

if(texCoords) free(texCoords); 
if(posCoords) free(posCoords); 
if(dposCoords) free(dposCoords); 

texCoords = malloc(sizeof(GLfloat)*coordCount); 
posCoords = malloc(sizeof(GLfloat)*coordCount); 
dposCoords = malloc(sizeof(GLfloat)*coordCount); 

int index = 0; 


float lowY, hiY = 0; 
int x,y = 0; 
BOOL drawLeftToRight = YES; 
for(y=0;y<SCREEN_HEIGHT;y+=blockSize) { 

    lowY = y; 
    hiY = y + blockSize; 

    // Draw a single row 
    for(x=0;x<=SCREEN_WIDTH;x+=blockSize) { 
     CGFloat px,py,px2,py2 = 0; 

     // Top point of triangle 
     if(drawLeftToRight) { 
      px = x; 
      py = lowY; 

      // Bottom point of triangle 
      px2 = x; 
      py2 = hiY; 
     } 
     else { 
      px = SCREEN_WIDTH-x; 
      py = lowY; 

      // Bottom point of triangle 
      px2 = SCREEN_WIDTH-x; 
      py2 = hiY; 
     } 

     // Top point of triangle 
     posCoords[index] = px; 
     posCoords[index+1] = py; 

     // Bottom point of triangle 
     posCoords[index+2] = px2; 
     posCoords[index+3] = py2; 

     texCoords[index] = px/SCREEN_WIDTH; 
     texCoords[index+1] = py/SCREEN_HEIGHT; 
     texCoords[index+2] = px2/SCREEN_WIDTH; 
     texCoords[index+3] = py2/SCREEN_HEIGHT; 

     index+=4; 
    } 

    drawLeftToRight = !drawLeftToRight; 



} 

답변

0

발견 : 텍스처 버퍼가 버텍스 버퍼에 넘쳐 흐 렸습니다. 일부 백그라운드 작업 (타이머를 사용하여 주변 메모리를 셔플 처리하는 경우가 있음)

1

enter image description here

은 제거 추가 마지막 정점은 가장자리를 따라 나쁜 정점을 사용하고 있으므로 사용 된 가장 오래된 정점을 대체합니다. 그림으로 설명하는 것이 더 쉽습니다. 유효한 삼각형
  • 삼각형 2 정점 2, 3, 4를 사용 - -
  • 삼각형 3 정점 4, 5, 6을 사용하여 유효 삼각형 -

    • 삼각형 1 정점 1, 2, 3을 사용하여 유효 삼각형
    • 삼각형 정점 4 5, 6, 7 사용 - 직선 아무 것도 그려지지한다
    • 삼각형 정점 5 6 7 8 사용
    • - 유효

    스트립을 작동 시키려면 스트립을 퇴색 삼각형으로 채우거나 스트립을 부러 뜨려야합니다.

  • 0

    나는 왼쪽에서 오른쪽으로 그려지며, 줄 끝에서 퇴보 삼각형을 추가하고, 다시 왼쪽에서 오른쪽으로 그려진다.

    [1, 2, 3, 4, 5, 6; 6 10; 10, 11, 8, 9, 6, 7]

    중간 부분은 퇴화 삼각형 (degenerate triangle) (예 : 제로 영역의 삼각형)이라고 부른다.

    다양한 종류의 손상이있는 이유를 추측해야한다면 정점과 인덱스가 예상 한 것과 정확히 일치하는지 확인해야합니다. 일반적으로 이러한 종류의 인덱스를 올바르게 지정하지 않으면 손상됩니다.