我必须找到非常大的数组的最大值和最小值.为此,我正在使用
Math.max.apply(Math, my_array);
Math.min.apply(Math, my_array);
Run Code Online (Sandbox Code Playgroud)
它在Firefox和IE上运行良好,但在Chrome上我总是会Maximum call stack size exceeded出错......我当前的数组有221954个元素,这不是我最大的元素.
有人知道如何在Chrome上解决此错误吗?如何优化最大值和最小值的搜索?
对于那些无法相信的人,请在Chrome的控制台中试试:
var xxx = []
for(var i=0; i<300000; i++){
xxx.push(Math.random());
}
Math.max.apply(Math, xxx);
Run Code Online (Sandbox Code Playgroud)
---> RangeError:超出最大调用堆栈大小
在我的场景中,我有一个简单的立方体:
var test = new THREE.Mesh(new THREE.CubeGeometry(10,10,10), new THREE.MeshBasicMaterial());
scene.add(test);
Run Code Online (Sandbox Code Playgroud)
通过用户遍历/缩放此多维数据集THREE.TransformControls.我需要的是在这些交互之后立方体的边界框.所以我在做
test.geometry.computeBoundingBox();
var bb = test.geometry.boundingBox;
bb.translate(test.localToWorld( new THREE.Vector3()));
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个错误的边界框!计算的翻译是正确的,但不是比例.边界框的宽度和高度始终为10 ...
这是一个错误或功能吗?如何获得我的立方体的正确边界框?
我有以下情况:我需要画一条带孔的线(一条不连续的线).这意味着我的Line包含几个视觉上没有组合的片段,但它们在其他一些上下文中属于一起.这些细分不仅仅包含两个点,所以不是这样的THREE.LinePieces工作方式.
这时,我用a BufferGeometry来存储我的顶点.一位同事告诉我,在WebGL中可以创建除顶点之外的两个数组:一个包含顶点的索引,另一个包含顶点应该如何组合的顺序.这是我的意思的一个例子:
indices = [0,1,2,3,4,5]
vertices = [x0, y0, z0, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5]
order = [0,1,1,2,3,4,4,5]
Run Code Online (Sandbox Code Playgroud)
有了这个,我会得到两条线:第一条从0点到1点到2点,然后是一个洞,然后是第二条线从3点到4点到5点.
所以像这样:
.___.___. .___.___.
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
我不熟悉WebGL,所以我相信我的同事可以创建这样的结构.但这对Three.js来说也是可能的吗?如果是的话,你是怎么做到的?
编辑:我再次与我的同事交谈,我得到了这段代码
indexBufferData = [0,1,1,2,3,4,4,5];
gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
gl.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER,
indexBufferData.limit() * Buffers.SIZEOF_INT,
indexBufferData, GL.GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
他说我只需复制索引而不是顶点(也可能但不建议)来获取线段.
所以我搜索WebGLRenderer并在2380行看到如果index我的属性中有一个属性,BufferGeometry将创建必要的缓冲区.但是设置此属性无效.使用THREE.LinePieces时仍然只连接两个点.