WebGL:GLD元素原因';GLDraweElements:尝试访问属性0';

WebGL:GLD元素原因';GLDraweElements:尝试访问属性0';,webgl,Webgl,我试着画一个简单的正方形,没什么特别的,但我最终还是画了一个正方形 'GLDraweElements:尝试访问属性0中超出范围的顶点' 我指定了4个标记,并使用索引缓冲区来引用它们。如果我将icount更改为3,则会得到第一个三角形,但值为6会导致引用错误 引用的类VertexShader、FragmentShader、Program和Environment都是简单的util类,程序在编译时不会报告任何错误 蒂亚 <!DOCTYPE html> <html> <he

我试着画一个简单的正方形,没什么特别的,但我最终还是画了一个正方形

'GLDraweElements:尝试访问属性0中超出范围的顶点'

我指定了4个标记,并使用索引缓冲区来引用它们。如果我将icount更改为3,则会得到第一个三角形,但值为6会导致引用错误

引用的类VertexShader、FragmentShader、Program和Environment都是简单的util类,程序在编译时不会报告任何错误

蒂亚

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<canvas id="glx" width="400" height="400"></canvas>

<script type="text/javascript" src="../vendor/gl-matrix/gl-matrix.js"></script>
<script type="text/javascript" src="../vendor/underscore/underscore-min.js"></script>

<script type="text/javascript" src="../lib/GLObject.js"></script>
<script type="text/javascript" src="../lib/Environment.js"></script>
<script type="text/javascript" src="../lib/Shader.js"></script>
<script type="text/javascript" src="../lib/Program.js"></script>


<script type="x-shader/vertex" id="vshader">
        attribute vec4 a_position;
        //attribute vec4 a_colour;
        varying vec4 v_colour;

        void main() {
            gl_Position = a_position;
            v_colour = vec4(1.0, 0.0, 0.0, 1.0);
        }


</script>

<script type="x-shader/fragment" id="fshader">
        precision mediump float;

        varying vec4 v_colour;

        void main() {
            gl_FragColor = v_colour;
        }


</script>

<script type="text/javascript">

    var
        program, vshader, fshader,
        gl, p, env,// gl, program instance and environment info
        vertexData, indexData, // typed arrays for the vertex and index data
        vbuffer,    // vertex positions buffer
        ibuffer     // index buffer
        ;

    gl = glx.getGL('glx');
    env = new glx.Environment(gl);


    vshader = new glx.VertexShader(gl, 'vshader');
    fshader = new glx.FragmentShader(gl, 'fshader');

    program = new glx.Program(gl, vshader, fshader);

    program.compile();

    p = program.getProgram();
    gl.useProgram(p);

    vbuffer = gl.createBuffer();
    ibuffer = gl.createBuffer();

    // setup buffers
    vertexData = new Float32Array([
       -0.5, 0.5, -0.5,
        -0.5, -0.5, -0.5,
        0.5, -0.5, -0.5,
        0.5, 0.5 -0.5
    ]);

    indexData = new Uint8Array([
       0, 1, 2,
       0, 2, 3
    ]);

    gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
    gl.bufferData(gl.ARRAY_BUFFER, vertexData, gl.STATIC_DRAW);

    // get program attributes
    var fsize = Float32Array.BYTES_PER_ELEMENT;
    var a_position = gl.getAttribLocation(p, 'a_position');
    gl.vertexAttribPointer(a_position, 3, gl.FLOAT, false, fsize * 3, 0);
    gl.enableVertexAttribArray(a_position);

    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuffer);
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW);
    var icount = indexData.length;

    gl.clearColor(0, 0, 0, 1);
    gl.clear(gl.COLOR_BUFFER_BIT);
    gl.drawElements(gl.TRIANGLES, icount, gl.UNSIGNED_BYTE, 0);


</script>


</body>
</html>

属性向量4 a_位置;
//属性向量4 a_颜色;
可变的vec4 v_颜色;
void main(){
gl_位置=a_位置;
v_color=vec4(1.0,0.0,0.0,1.0);
}
精密中泵浮子;
可变的vec4 v_颜色;
void main(){
gl_FragColor=v_颜色;
}
变量
程序,vshader,fshader,
gl,p,env,//gl,程序实例和环境信息
vertexData、indexData、//顶点和索引数据的类型化数组
vbuffer,//顶点位置缓冲区
ibuffer//索引缓冲区
;
gl=glx.getGL('glx');
环境=新的glx.Environment(gl);
vshader=新的glx.VertexShader(gl,'vshader');
fshader=新的glx.FragmentShader(gl,'fshader');
程序=新的glx.program(gl、vshader、fshader);
program.compile();
p=program.getProgram();
德国劳埃德船级社(p);
vbuffer=gl.createBuffer();
ibuffer=gl.createBuffer();
//设置缓冲区
vertexData=新的浮点数组([
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5 -0.5
]);
indexData=新的UINT8阵列([
0, 1, 2,
0, 2, 3
]);
gl.bindBuffer(gl.ARRAY\u BUFFER,vbuffer);
gl.bufferData(gl.ARRAY\u BUFFER、vertexData、gl.STATIC\u DRAW);
//获取程序属性
var fsize=Float32Array.BYTES\u每个元素;
var a_position=gl.GetAttriblLocation(p,“a_position”);
gl.VertexAttribute指针(a_位置,3,gl.FLOAT,false,fsize*3,0);
gl.EnableVertexAttributeArray(a_位置);
gl.bindBuffer(gl.ELEMENT\u ARRAY\u BUFFER,ibuffer);
gl.bufferData(gl.ELEMENT\u ARRAY\u BUFFER、indexData、gl.STATIC\u DRAW);
var icount=indexData.length;
gl.clearColor(0,0,0,1);
总账清除(总账颜色缓冲位);
总帐付款人(总帐三角形,i计数,总帐无符号字节,0);

嗯-我脸上有更多鸡蛋:问题出在vertexData:


vertexData=新的浮点数组([
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5 -0.5
]);


特别是
0.5-0.5
简单逗号缺失,没有错误。应该仔细看看。

嗯-我脸上有更多鸡蛋:问题在于顶点数据:


vertexData=新的浮点数组([
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5 -0.5
]);


特别是
0.5-0.5
简单逗号缺失,没有错误。应该仔细看看。

嗯-我脸上有更多鸡蛋:问题在于顶点数据:


vertexData=新的浮点数组([
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5 -0.5
]);


特别是
0.5-0.5
简单逗号缺失,没有错误。应该仔细看看。

嗯-我脸上有更多鸡蛋:问题在于顶点数据:


vertexData=新的浮点数组([
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5 -0.5
]);

特别是
0.5-0.5
简单逗号缺失,没有错误。应该仔细看看