2017-09-28 4 views
0

겉으로보기에는 무해한 데이터로 기본 요소를 그릴 때 범위를 벗어납니다. 나는 (크기에 대해 앞에서 사과한다) :오류가 발생했습니다 : GL_INVALID_OPERATION : glDrawElements : 버퍼 오류에 대한 범위를 벗어났습니다.

const vertexColourData = [ 

    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 

    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 

    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 

    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 

    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 

    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0/*, 


    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 

    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 
    0.0, 1.0, 1.0, 1.0, 

    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 
    0.0, 1.0, 0.0, 1.0, 

    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 1.0, 1.0, 

    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 

    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0, 
    1.0, 1.0, 0.0, 1.0*/ 

    ], 
    vertexPositionData = [ 

    -1.0, -1.0, +1.0, 
    +1.0, -1.0, +1.0, 
    +1.0, +1.0, +1.0, 
    -1.0, +1.0, +1.0, 

    -1.0, -1.0, -1.0, 
    -1.0, +1.0, -1.0, 
    +1.0, +1.0, -1.0, 
    +1.0, -1.0, -1.0, 

    -1.0, +1.0, -1.0, 
    -1.0, +1.0, +1.0, 
    +1.0, +1.0, +1.0, 
    +1.0, +1.0, -1.0, 

    -1.0, -1.0, -1.0, 
    +1.0, -1.0, -1.0, 
    +1.0, -1.0, +1.0, 
    -1.0, -1.0, +1.0, 

    +1.0, -1.0, -1.0, 
    +1.0, +1.0, -1.0, 
    +1.0, +1.0, +1.0, 
    +1.0, -1.0, +1.0, 

    -1.0, -1.0, -1.0, 
    -1.0, -1.0, +1.0, 
    -1.0, +1.0, +1.0, 
    -1.0, +1.0, -1.0/*, 


    -1.0, -1.0, +1.0, 
    +1.0, -1.0, +1.0, 
    +1.0, +1.0, +1.0, 
    -1.0, +1.0, +1.0, 

    -1.0, -1.0, -1.0, 
    -1.0, +1.0, -1.0, 
    +1.0, +1.0, -1.0, 
    +1.0, -1.0, -1.0, 

    -1.0, +1.0, -1.0, 
    -1.0, +1.0, +1.0, 
    +1.0, +1.0, +1.0, 
    +1.0, +1.0, -1.0, 

    -1.0, -1.0, -1.0, 
    +1.0, -1.0, -1.0, 
    +1.0, -1.0, +1.0, 
    -1.0, -1.0, +1.0, 

    +1.0, -1.0, -1.0, 
    +1.0, +1.0, -1.0, 
    +1.0, +1.0, +1.0, 
    +1.0, -1.0, +1.0, 

    -1.0, -1.0, -1.0, 
    -1.0, -1.0, +1.0, 
    -1.0, +1.0, +1.0, 
    -1.0, +1.0, -1.0*/ 

    ], 
    vertexNormalData = [ 

    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 

    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 

    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 

    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 

    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 

    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0/*, 


    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 
    0.0, 0.0, +1.0, 

    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 
    0.0, 0.0, -1.0, 

    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 
    0.0, +1.0, 0.0, 

    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 
    0.0, -1.0, 0.0, 

    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 
    +1.0, 0.0, 0.0, 

    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0, 
    -1.0, 0.0, 0.0*/ 

    ], 
    vertexIndexData = [ 

    0, 1, 2, 
    0, 2, 3, 
    4, 5, 6, 
    4, 6, 7, 
    8, 9, 10, 
    8, 10, 11, 
    12, 13, 14, 
    12, 14, 15, 
    16, 17, 18, 
    16, 18, 19, 
    20, 21, 22, 
    20, 22, 23/*, 

    24, 25, 26, 
    24, 26, 27, 
    28, 29, 30, 
    28, 30, 31, 
    32, 33, 34, 
    32, 34, 35, 
    36, 37, 38, 
    36, 38, 39, 
    40, 41, 42, 
    40, 42, 43, 
    44, 45, 46, 
    44, 46, 47*/ 

    ]; 

마지막 배열을 제외하고 모두 주석 처리를 제거하면 모두 정상적으로 작동한다. 이 경우 색상, 일반 및 위치 데이터가 두 배나 많으며 두 번째 절반은 사용되지 않은 상태로 유지됩니다. 내 수학 잘못이고 내가 볼 수없는

ERROR :GL_INVALID_OPERATION : glDrawElements : range out of bounds for buffer

:

나는 효과적으로 나는 다음과 같은 오류가 발생, 놀이로 마지막 정점을 가져 오는, 그러나, vertexIndexData 배열의 마지막 절반의 주석을 해제합니다. 누구든지 아이디어가 있습니까?

업데이트 : 이것은 정점 인덱스 데이터의 실제 값과 아무 관련이 없습니다. 다음을 시도하면 ...

vertexIndexData = [ 

    0, 1, 2, 
    0, 2, 3, 
    4, 5, 6, 
    4, 6, 7, 
    8, 9, 10, 
    8, 10, 11, 
    12, 13, 14, 
    12, 14, 15, 
    16, 17, 18, 
    16, 18, 19, 
    20, 21, 22, 
    20, 22, 23, 

    0, 1, 2, 
    0, 2, 3, 
    4, 5, 6, 
    4, 6, 7, 
    8, 9, 10, 
    8, 10, 11, 
    12, 13, 14, 
    12, 14, 15, 
    16, 17, 18, 
    16, 18, 19, 
    20, 21, 22, 
    20, 22, 23/*, 

    24, 25, 26, 
    24, 26, 27, 
    28, 29, 30, 
    28, 30, 31, 
    32, 33, 34, 
    32, 34, 35, 
    36, 37, 38, 
    36, 38, 39, 
    40, 41, 42, 
    40, 42, 43, 
    44, 45, 46, 
    44, 46, 47*/ 

    ]; 

... 나는 다시 같은 삼각형을 그릴 것이라고 생각합니다. 동일한 오류가 발생합니다. 따라서 불만은 버텍스 인덱스 데이터 버퍼의 크기와 관련이 있습니다.

+0

[WebGL의 버퍼 범위를 벗어나는 일반적인 원인은 무엇입니까?] (https://stackoverflow.com/questions/32447641/what-is-common-cause-of-range-out-of- bounds-of-buffer-in-webgl) – Andreas

+0

안녕하세요. 예, 답변을 살펴 보았지만 도움이되지 않습니다. 위의 데이터는 여기에 설명 된 세 가지 범주 중 하나에 속하지 않는 것으로 보입니다. –

+0

뭔가 처음에는 나를 놀라게한다 : 6 개의 꼭지점이 있지만 'vertexIndexData'에는 23보다 큰 인덱스가 포함되어있다. 이것은 분명히 "바운드"이다. 내가 놓친 것이 있는가? –

답변

0

문제는 데이터가 아니라 사용으로 인해 발생했습니다. 즉, 내 render() 메서드가 호출 될 때마다가 아니라 한 번만 버텍스 인덱스 정보를 보유한 요소 버퍼를 바인딩했습니다. 컬러와 텍스처를위한 두 개의 셰이더가 있기 때문에 마지막으로 바인딩 된 셰이더이기 때문에 텍스처 셰이더의 요소 버퍼가 유일하게 사용되었습니다. 이 모든 것이 여전히 어떻게 작용했는지 알아내는 데는 가치가 없습니다. 속성 오프셋 등이 두 쉐이더에서 동일하다고 생각합니다. 왜 내가 꼭지점 인덱스에 대한 값을 선택할 수 있었는지와 모든 것이 여전히 작동하는 것처럼 보입니다.