WebGL元素阵列缓冲区无法正常工作

Der*_*lon 1 haxe opengl-es webgl

我正在学习带有haxe的WebGL,并且我坚持使用描述元素数组的部分.什么被认为是一个广场没有出现,我不知道为什么?

var verticesArray = [   
                             0.5, 0.5,      
                             0.5,-0.5,  
                            -0.5,-0.5, 
                            -0.5, 0.5   
                        ];

    var indicesArray = [0, 1, 3, 1, 2, 3];

    var VBO = GL.createBuffer();
    GL.bindBuffer(GL.ARRAY_BUFFER, VBO);
    GL.bufferData(GL.ARRAY_BUFFER,new Float32Array(verticesArray), GL.STATIC_DRAW);

    var EBO = GL.createBuffer();
    GL.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, EBO);
    GL.bufferData(GL.ELEMENT_ARRAY_BUFFER,  new UInt16Array(indicesArray), GL.STATIC_DRAW);

    GL.vertexAttribPointer(0, 2, GL.FLOAT, false, 0, 0);
    GL.enableVertexAttribArray(0);

    GL.useProgram(shaderProgram);


    GL.drawElements(GL.TRIANGLES, 6, GL.UNSIGNED_INT, 0);

    GL.bindBuffer(GL.ARRAY_BUFFER, null);
    GL.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
Run Code Online (Sandbox Code Playgroud)

这里是所有想要绘制正方形的代码我已经得到了着色器编程工作

Win*_*tro 5

确保调用中的类型drawElements与提供的索引数组类型匹配,即

  • gl.UNSIGNED_BYTE 对于 Uint8Array
  • gl.UNSIGNED_SHORT 对于 Uint16Array
  • gl.UNSIGNED_INTfor Uint32Array(需要OES_element_index_uint延期)

此外VertexAttribPointer,enableVertexAttribArray调用始终在当前绑定到ARRAY_BUFFER目标的缓冲区上运行,在这种情况下,这不是问题,但如果添加其他VBO,则很好地成为编写它的方式.因此,要么在创建和绑定缓冲区之后设置它们,要么确保绑定了正确的缓冲区.