我有一个来自 BufferGeometry 的 x/y/z 位置数组,有近 60000 个点(18000 个值),
[3, 2, 1, 3, 2, 1, 3, 2, 1, ...]
我需要对这些位置进行洗牌,然后先获得 30000 以获得随机点。我正在考虑在洗牌之前将此数组转换为 Vector 3 数组,以免丢失所有“三重奏”值。
[new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), ...]
我需要词汇帮助。 请问这两个数组有具体名称吗? (这将帮助我了解接下来的问题)。
是否有将数组转换为另一个数组的特定方法?
有没有最好的方法来洗牌原始位置数组?
最佳答案
简短的答案是:您不需要转换为 THREE.Vector3 即可从数组中提取 n
个随机点。这两个数组都没有特定的名称。
下面我提供了执行您想要执行的操作的函数:
有没有最好的方法来洗牌原始位置数组? (是的,见下文)
var points = [5, 6, 7, 3, 2, 1, 5, 6, 7, 3, 2, 1, 5, 6, 7]
// Assuming there are more points than the number of points you need to get back
function getRandomPoints (points, numberOfPoints) {
var resultPoints = []
for (var i = 0; i < numberOfPoints; i++) {
// Get a random index
var randomIndex = Math.floor(Math.random() * points.length);
var index = (randomIndex - randomIndex % 3)
resultPoints.push(points[index])
resultPoints.push(points[index + 1])
resultPoints.push(points[index + 2])
points.splice(index, index + 3);
}
return resultPoints;
}
var randomPoints = getRandomPoints(points, 2);
是否有将数组转换为另一个数组的特定方法? (是的,见下文)
var points = [5, 6, 7, 3, 2, 1, 5, 6, 7, 3, 2, 1, 5, 6, 7]
function convertToVector (points) {
var resultPoints = []
for (var i = 0; i < points.length; i = i + 3) {
var vectorPoint = new THREE.Vector3(points[i], points[i + 1], points[i + 2])
resultPoints.push(vectorPoint)
}
return resultPoints
}
var convertedPoints = convertToVector(points)
关于javascript - 在 ThreeJS 中打乱位置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801930/