我有一个来自BufferGeometry的x / y / z位置数组,有近60000个点(18000个值),
[3, 2, 1, 3, 2, 1, 3, 2, 1, ...]
我需要将这些位置改组,然后先获得30000以获得随机点数。我正在考虑将这个数组转换为Vector 3的数组,然后再进行改组,以免丢失所有“trio”值。
[new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), ...]
我需要词汇帮助。 那两个阵列有具体名称吗? (这有助于我发现下一个问题)。
是否有将数组转换为另一个数组的具体方法?
有没有最好的方法来改变原始位置阵列?
答案 0 :(得分: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)