три js обновляют tubegeometry, не видимую r100

#javascript #three.js #geometry #updates

#javascript #three.js #геометрия #Обновления

Вопрос:

У меня есть функция, которая генерирует новую трубу в каждом кадре после перемещения сетки. Функция, которая выполняет обновление tubegeometry, выглядит следующим образом:

 function UpdateKettingMeshes(kettingMeshes, kraalElements, kettingCurvesArray, kettingShapeArray) {
    for (let i = 0; i < kettingMeshes.length; i  ) {
        const element = kettingMeshes[i];
        const elCurve = kettingCurvesArray[i];
        const elShape = kettingShapeArray[i];
        elCurve.v0.copy(kraalElements[i].kraal.position.clone());
        elCurve.v1.copy(kraalElements[i].kraal.position.clone().add(elShape.controlPointDirection1.clone().multiplyScalar(elShape.controlPointPower1)));
        elCurve.v2.copy(kraalElements[i   1].kraal.position.clone().add(elShape.controlPointDirection2.clone().multiplyScalar(elShape.controlPointPower2)));
        elCurve.v3.copy(kraalElements[i   1].kraal.position.clone());
        const geometry = new THREE.TubeGeometry( elCurve, 80, 1.2, 8, false );
        element.geometry.vertices = geometry.vertices;
        element.geometry.verticesNeedUpdate = true;
    }

    return kettingMeshes;
}
  

Я вызываю эту функцию для каждого кадра следующим образом:

 kettingMeshData = UpdateKettingMeshes(kettingMeshData, kralenObjects, kettingCurveData, kettingShapeData);
  

это работает нормально, ошибок нет, и когда я console.log открываю kettingMeshData и проверяю, были ли обновлены вершины, я вижу, что это так, см. Изображения ниже:

предыдущий кадр: введите описание изображения здесь текущий кадр: введите описание изображения здесь

Но проблема в том, что фактическая сетка не меняется в сцене? почему он не обновляется?

примечание стороны, все сетки для труб расположены в three.group().

если что-то непонятно, дайте мне знать, чтобы я мог уточнить!

Комментарии:

1. (1) Избегайте вызова clone() каждого кадра. (2) Избегайте вызова new каждого кадра. (3) Недопустимо присвоение нового массива geometry.vertices three.js код; вместо этого просто измените значения существующих элементов массива.

2. да, я знаю, что это не оптимальный код, если бы вы могли посоветовать мне, как сделать это более эффективно, это было бы очень ценно!! и спасибо за то, что с массивом, я это изменю 🙂