我正在使用WebGL,所以我需要一直Float32Array
。有没有办法强制数组成为Float32Array
?我试过这个:
var cubeVertices = new Float32Array(3 * 4 * 6);
cubeVertices = [
/* Vertices */
];
但这似乎将类型更改为Float64Array
,因为我不能将其与 WebGL 一起使用,但是当我执行new Float32Array(cubeVertices)
时它可以工作。我真的不想一直使用new Float32Array
命令,因为它分配了无用的内存,因为我不需要数据的多个副本。
那么有没有办法在没有两个数组的情况下创建一个Float32Array
,其中一个永远不会再使用?
只有 3 种方法可以创建实际Float32Array
:
new Float32Array(length)
TypedArray.from(source[, mapFn[, thisArg]])
来源TypedArray.of(element0[, element1[, ...[, elementN]]])
来源
你可以做
Float32Array.from(yourArray);
from
方法将类似数组的对象转换为 Float32Array,并可用于 javascript 上的其他数组类型,如 Array、Float32Array 或 Int16Array。
您可以在以下 URL 的"索引集合"上阅读有关此内容的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
我认为这对你来说是正确的。
var num=[6676.88,8878.99.....];
var floatVal=num.map(function(value){
return Math.fround(value);
});
console.log(floatVal);
所以我从这些答案中创建了自己的解决方案,这样就不会有两个数组浪费内存。我使用Float32Array.from
函数并在那里创建一个本地数组,该数组应在该行之后删除,因此我的代码如下所示:
var cubeVertices = Float32Array.from(
[
0.5, -0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, 0.5, -0.5,
-0.5, 0.5, -0.5
]
);
多亏了Akxe,使用Float32Array.of
会更好,但它没有得到广泛的支持。