在ThreeJS中改组位置阵列

时间:2017-08-21 16:35:24

标签: javascript arrays sorting three.js

我有一个来自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), ...]

我需要词汇帮助。 那两个阵列有具体名称吗? (这有助于我发现下一个问题)。

是否有将数组转换为另一个数组的具体方法?

有没有最好的方法来改变原始位置阵列?

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)