WebGL은 인덱스 255를 사용한 인덱스 그리기를 지원하지 않습니다.
P粉265724930
P粉265724930 2023-08-17 12:37:59
0
1
363

이것은 uint8 값 255 하나만으로 인덱스 버퍼를 생성하는 가장 간단한 WebGL 테스트 프로그램입니다. 64px 크기의 빨간색 정사각형을 그려야 하지만 그렇지 않습니다(인덱스 값은 그리기에 중요하지 않습니다).

어쨌든 WebGL은 부호 없는 바이트 범위에 있더라도 인덱스 255의 요소를 무시합니다. 254 또는 다른 값을 사용하면 빨간색 사각형이 예상대로 나타납니다.

이것은 WebGL의 버그입니까, 아니면 예상되는 동작입니까? 관련 정보를 찾을 수 없습니다.

 <스크립트 유형="모듈"> 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粉265724930
P粉265724930

모든 응답 (1)
P粉476883986

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

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

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!