【发布时间】:2020-10-10 12:17:15
【问题描述】:
所有。我是 webgl 的新手,但我检查了有关此错误的资源。我正在尝试在我的圆圈旁边画一个正方形。之后我画了一个圆圈,我为正方形添加了 4 个索引和基于此组织drawArrays。但我收到此错误:
GL 错误:GL_INVALID_OPERATION:glDrawArrays:尝试访问属性 0 中超出范围的顶点
还检查了我的边界和索引,但这里的代码没有问题:
var vPosition,angle=10,j=1,xr=0.2,yr=0.2,rad;
var transformationMatrix, transformationMatrixLoc;
window.onload = function init()
{
canvas = document.getElementById( "gl-canvas" );
gl = WebGLUtils.setupWebGL( canvas );
if ( !gl ) { alert( "WebGL isn't available" ); }
gl.viewport( 0, 0, canvas.width, canvas.height );
gl.clearColor( 1.0, 1.0, 1.0, 1.0 );
// Load shaders and initialize attribute buffers
var program = initShaders( gl, "vertex-shader", "fragment-shader" );
gl.useProgram( program );
vertices = [
vec2(0,0)
];
for(var i =0 ; i<=360 ; i+=10)
{
vertices.push(vec2(xr*Math.cos(i*(Math.PI/180)),yr*Math.sin(i*
(Math.PI/180))));
}
vertices.push(vec2(0.20,0));
vertices.push(vec2(0.25,-0.05));
vertices.push(vec2(0.3,0));
vertices.push(vec2(0.25,0.05));
vBuffer = gl.createBuffer();
gl.bindBuffer( gl.ARRAY_BUFFER, vBuffer );
gl.bufferData( gl.ARRAY_BUFFER, flatten(vertices), gl.STATIC_DRAW );
// Associate out shader variables with our data buffer
vPosition = gl.getAttribLocation( program, "vPosition" );
gl.vertexAttribPointer( vPosition, 2, gl.FLOAT, false, 0, 0 );
gl.enableVertexAttribArray( vPosition );
transformationMatrixLoc =
gl.getUniformLocation(program,"transformationMatrix" );
render();
}
render(){
gl.clear( gl.COLOR_BUFFER_BIT );
var MStack = [] ;
var transformationMatrix = mat4();
MStack.push(transformationMatrix);
gl.uniformMatrix4fv( transformationMatrixLoc, false,
flatten(transformationMatrix) );
gl.uniform4fv(colorLoc, vec4(red, green, blue, 1.0));
gl.drawArrays( gl.TRIANGLE_FAN, 0, vertices.length-4 );
transformationMatrix = MStack.pop();
MStack.push(transformationMatrix);
gl.uniformMatrix4fv( transformationMatrixLoc, false,
flatten(transformationMatrix) );
gl.drawArrays(gl.TRIANGLE_FAN,vertices.length-4,vertices.length);
gl.uniform4fv(colorLoc, vec4(red, green, blue, 1.0));
window.requestAnimFrame(render);
}
希望你们能帮帮我。真的谢谢。
【问题讨论】: