#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. да, я знаю, что это не оптимальный код, если бы вы могли посоветовать мне, как сделать это более эффективно, это было бы очень ценно!! и спасибо за то, что с массивом, я это изменю 🙂