Javascript 使用WEBGL构建3D形状时,JS阵列是否有限制?

Javascript 使用WEBGL构建3D形状时,JS阵列是否有限制?,javascript,webgl,Javascript,Webgl,我一直在尝试建立一个3D角色。整个模型约有50个立方体/长方体,但形状在第35个形状之后停止构建。代码已经很长了,但我不知道为什么其余的形状没有显示出来 js代码如下所示: var canvas; var gl; var total= 1188; var vertex= []; var vertexColors =[]; var indices =[]; window.onload = function init() { canvas = document.getElementById

我一直在尝试建立一个3D角色。整个模型约有50个立方体/长方体,但形状在第35个形状之后停止构建。代码已经很长了,但我不知道为什么其余的形状没有显示出来

js代码如下所示:

var canvas;
var gl;

var total= 1188;

var vertex= [];

var vertexColors =[];

var indices =[];

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( 0.0,0.0,1.0, 1.0 );

gl.enable(gl.DEPTH_TEST);
var program = initShaders( gl, "vertex-shader", "fragment-shader" );
gl.useProgram( program );

var iBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, iBuffer);    
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8Array(indices), gl.STATIC_DRAW);

var cBuffer = gl.createBuffer();
gl.bindBuffer( gl.ARRAY_BUFFER, cBuffer );
gl.bufferData( gl.ARRAY_BUFFER, flatten(vertexColors), gl.STATIC_DRAW );

var vColor = gl.getAttribLocation( program, "vColor" );
gl.vertexAttribPointer( vColor, 4, gl.FLOAT, false, 0, 0 );
gl.enableVertexAttribArray( vColor );

var vBuffer = gl.createBuffer();
gl.bindBuffer( gl.ARRAY_BUFFER, vBuffer );
gl.bufferData( gl.ARRAY_BUFFER, flatten(vertices), gl.STATIC_DRAW );

var vPosition = gl.getAttribLocation( program, "vPosition" );
gl.vertexAttribPointer( vPosition, 3, gl.FLOAT, false, 0, 0 );
gl.enableVertexAttribArray( vPosition );

render();
}

}


我尝试过更改浏览器和编辑代码,但似乎仍然不起作用。

您使用的是
无符号字节<代码>无符号字节
只能保存0到255之间的值,因此不能使用超过255个顶点

换行

gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8Array(indices), gl.STATIC_DRAW);
对此

gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
你的底线是什么

gl.drawElements( gl.TRIANGLES, numVertices, gl.UNSIGNED_SHORT, 0 );
您可以使用高达65535的索引


要使用超过65535个顶点,您需要停止使用索引,而是使用
gl.drawArrays
,或者您可以检查并启用扩展,然后使用
uint32阵列
gl.UNSIGNED_INT
并使用最多4294967296个标记(虽然可能没有足够的内存容纳40亿个顶点,但html是一个非常基本的代码,我知道它没有问题。这与JS有关,但我真的不知道它是什么。一般来说,我建议使用现有的框架来处理webgl,就像我们不允许使用任何外部库一样她比我们得到的几份文件还要多:(那么我建议你向你的导师寻求帮助:-)非常感谢你,先生!!!它工作得非常好!!谢谢你以我理解的方式向我解释:D
gl.drawElements( gl.TRIANGLES, numVertices, gl.UNSIGNED_SHORT, 0 );