그리고 미리 감사드립니다.gl.drawElements가 해당 정점 배열 버퍼를 "찾는"방법은 무엇입니까?
저는 Webgl에서 매우 새롭습니다. drawElements 메소드와 현재 그리드하려는 버텍스 버퍼 사이의 링크를 실제로 이해하지 못합니다. drawArray 메소드의 상황을 대략적으로 이해합니다 (예 : 버퍼 작성, 컨텍스트에 바인딩, 데이터로 채우기, 해당 속성을 가리킴, 그리기).
[.Offscreen-For-WebGL-0x7fae2b940800]GL ERROR :GL_INVALID_OPERATION : glDrawElements: bound to target 0x8893 : no buffer
어쩌면 내 코드의 힌트는 도움이 : 나는 인덱스 배열 적은 정점 데이터와 동일 할 때, 나는 이러한 유형의 오류가 발생.
const cube = new Program(renderer.gl, vertex3d, fragment); // my webgl program
const cubeData = new Cube(); // Only array of vertices/indices
const cubeVertexPosition = new ArrayBuffer(renderer.gl, cubeData.vertices, 'STATIC_DRAW'); // ARRAY_BUFFER
const cubeVertexIndices = new IndexBuffer(renderer.gl, renderer.gl.UNSIGNED_SHORT, cubeData.indices, 'STATIC_DRAW'); // ELEMENT_ARRAY_BUFFER
cubeVertexPosition.attribute('aPosition', 3, 'FLOAT', false); // define attribute corresponding in vertex shader
cubeVertexPosition.attributePointer(cube); // enableVertexAttribArray + vertexAttribPointer
[...]
cubeVertexIndices.draw('TRIANGLES', 0, 36); // drawElements with gl.UNSIGNED_SHORT type
제가
drawArray :)((가) [...] 만 유니폼 변환 행렬된다)와 도면에서 성공적이다;
은 아마 당신은,
고마워 날이 마술을 이해하는 데 도움이 수를 염두에 빠른 조언을!
빠른 답장을 보내 주셔서 감사합니다. 저를 위해 좀 더 명백합니다. 두 배열의 스키마는 사물이 어떻게 연결되어 있는지 설명하지만 링크가 명확하게 명확하지 않습니다. 어떤 ARRAY_BUFFER이 (가) ELEMENT_ARRAY_BUFFER에 "링크"되어 있는지 지정할 수있는 방법이 있습니까? –
"링크"는 당신이'drawElements'를 호출 할 때 어느 버퍼에 묶여 있는지에 달려 있습니다.당신은'ELEMENT_ARRAY_BUFFER'를'target'으로'bindBuffer'를 호출하면 요소 (인덱스) 버퍼가 바인드되고 속성 (정점) 버퍼가 바인드 된'ARRAY_BUFFER'와 함께'bindBuffer'를 호출합니다. 이것은 그처럼 간단합니다. 이 부분을 지정하려면 내 대답을 편집하십시오. – dest1