Maison  >  Questions et réponses  >  le corps du texte

WebGL ne prend pas en charge le dessin d'index à l'aide de l'index 255

<p>Il s'agit du programme de test WebGL le plus simple, qui crée un tampon d'index avec une seule valeur uint8 de 255. Il devrait dessiner un carré rouge de taille 64px, mais ce n'est pas le cas (la valeur de l'index n'est pas importante pour le dessin). </p> <p> D'une manière ou d'une autre, WebGL ignore l'élément à l'index 255 même s'il se trouve dans la plage d'octets non signés. En utilisant 254 ou d’autres valeurs, le carré rouge apparaît comme prévu. </p> <p>Est-ce un bug dans WebGL ou un comportement attendu ? Je ne trouve aucune information pertinente. </p> <pre class="brush:php;toolbar:false;"><canvas width="800" height="600"></canvas> <script type="module"> let canvas = document.querySelector("canvas"); let gl = canvas.getContext("webgl2", {antialias: false}); laissez vert = gl.createShader(gl.VERTEX_SHADER); laissez frag = gl.createShader(gl.FRAGMENT_SHADER); let prog = gl.createProgram(); laissez index_buf = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf); gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, nouveau Uint8Array([255]), gl.STATIC_DRAW ); gl.shaderSource(vert, `#version 300 es vide principal() { gl_Position = vec4(pos, 1); gl_PointSize = 64,0 ; } `); gl.shaderSource(frag, `#version 300 es flotteur de précision ; couleur vec4 ; vide principal() { couleur = 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); </script></pre> <p><br /></p>
P粉265724930P粉265724930399 Il y a quelques jours390

répondre à tous(1)je répondrai

  • P粉476883986

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

    Afficher Spécification WebGL 2.0 - PRIMITIVE_RESTART_FIXED_INDEX est toujours activé  :

    Donc, si le type d'index est UNSIGNED_BYTE, l'index 255 est un redémarrage brutindex et ne peut pas être utilisé pour indexer des sommets.

    répondre
    0
  • Annulerrépondre