>  Q&A  >  본문

WebGL은 인덱스 255를 사용한 인덱스 그리기를 지원하지 않습니다.

<p>이것은 uint8 값 255 하나만으로 인덱스 버퍼를 생성하는 가장 간단한 WebGL 테스트 프로그램입니다. 64px 크기의 빨간색 정사각형을 그려야 하지만 그렇지 않습니다(인덱스 값은 그리기에 중요하지 않습니다). </p> <p>어쨌든 WebGL은 부호 없는 바이트 범위에 있더라도 인덱스 255의 요소를 무시합니다. 254 또는 다른 값을 사용하면 빨간색 사각형이 예상대로 나타납니다. </p> <p>이것은 WebGL의 버그입니까, 아니면 예상되는 동작입니까? 관련 정보를 찾을 수 없습니다. </p> <pre class="brush:php;toolbar:false;"><canvas width="800" height="600"></canvas> <스크립트 유형="모듈"> let canvas = document.querySelector("canvas"); let gl = canvas.getContext("webgl2", {antialias: false}); vert = gl.createShader(gl.VERTEX_SHADER); let frag = gl.createShader(gl.FRAGMENT_SHADER); let prog = gl.createProgram(); let index_buf = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf); gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, 새로운 Uint8Array([255]), gl.STATIC_DRAW ); gl.shaderSource(vert, `#version 300 es 무효 메인() { gl_Position = vec4(pos, 1); gl_PointSize = 64.0; } `); gl.shaderSource(frag, `#version 300 es 정밀 하이프 플로트; vec4 색상 출력; 무효 메인() { 색상 = vec4(1,0,0,1); } `); gl.compileShader(vert); gl.compileShader(frag); gl.attachShader(prog, vert); gl.attachShader(prog, frag); gl.linkProgram(prog); gl.clearColor(0, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT); gl.useProgram(prog); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf); gl.drawElements(gl.POINTS, 1, gl.UNSIGNED_BYTE, 0); <p><br /></p>
P粉265724930P粉265724930450일 전447

모든 응답(1)나는 대답할 것이다

  • P粉476883986

    P粉4768839862023-08-18 00:14:57

    보기 WebGL 2.0 사양 - PRIMITIVE_RESTART_FIXED_INDEX는 항상 활성화되어 있습니다 :

    따라서 인덱스 유형이 UNSIGNED_BYTE인 경우 인덱스 255는 raw restart 인덱스이며 정점을 인덱스하는 데 사용할 수 없습니다.

    회신하다
    0
  • 취소회신하다