为了节省内存,判断并选择参数化数据的typedArraypublicstaticFillIndexArray(len:number){letindexArr=len<0x100?newUint8Array(len):(len<0x10000?newUint16Array(len):newUint32Array(len));for(leti=0;ix+curPosition/3),curIndex);curIndex+=geo.Indices.length;}OK,这时候有问题了。反正画错了。奇怪的形状在索引、顶点和法线。我认为只有错误的索引才会导致这种情况,所以我进行了跟踪分析。罪魁祸首的解决方法是Uint8Array,因为这小子在底越界的时候不报错,所以让我再循环一遍...原理我用几行代码解释一下consta=newUint8Array(10)constb=a.map(v=>v)console.log(b)//结果[0,0,0,0,....]添加时,值的大小发生变化,直到边界consta=newUint8Array(10)constb=a.map(v=>v+255)console.log(b)//结果[255,255,255,255,....]再次相加consta=newUint8Array(10)constb=a.map(v=>v+256)console.log(b)//Theresult[0,0,0,0,....]原理是当Uint8Array越界,不会报错,会在下一个边界循环!看MDN的解决方法是判断加入后的大小//@ts-ignoreconstmax=geo.Indices.reduce((acc,val)=>{constvalue=val+curPosition/3if(value>=acc){acc=值;}返回acc;},0)constmapCount=geo.Indices.lengthconstmapIndices=max<0x100?newUint8Array(mapCount):(indexCount<0x10000?newUint16Array(mapCount):newUint32Array(mapCount));for(leti=0;ix+curPosition/3),curIndex);