У меня есть все для трехмерной реализации с Three. js, работающей в простом js приложении. Я использую BufferGeometry для линий и сеток, и я изменяю атрибут позиции, чтобы изменить их фигуры.
Теперь я использую Ioni c и преобразовываю 3d-содержимое в компонент angular. У меня все работает, за исключением того, что я не могу обновить значения позиций в bufferAttribute.
Я использовал это в оригинальном js, чтобы получить массив позиций для изменения:
var vrts = myMesh.geometry.attributes.position.array;
Затем Я мог изменить и установить значения массива vrts с такими вещами, как:
vrts[0] = newValue;
, и тогда я устанавливал needsUpdate = true с помощью:
myMesh.geometry.attributes.position.needsUpdate = true;
В * 1046 все работало нормально app.
В приложении Ioni c, когда я пытался указать, чтобы получить массив позиций, было сказано: «Атрибуты» свойства не существует для типа BufferGeometry | Геометрия, поэтому я преобразовал в это:
vrts = (this.geometry.getAttribute("position"));
и теперь я могу получить доступ к значениям с помощью:
vertexValue = vrts.array[0];
Но, когда я пытаюсь изменить значение, ie:
vrts.array[0] = newValue;
Там написано: ошибка TS2542: подпись индекса в типе 'ArrayLike <число>' разрешает только чтение
и не позволяет мне изменять значение.
I также были некоторые проблемы с доступом к переменной needsUpdate. Ранее я использовал:
myMesh.geometry.attributes.position.needsUpdate = true;
и теперь преобразован в это, но не уверен, что это правильно:
(<THREE.BufferAttribute>vrts).needsUpdate = true;
Я также пытаюсь установить массив 'позиции' в будьте динамичны c со следующим утверждением:
(<THREE.BufferAttribute>this._geometry.getAttribute("position")).setUsage(THREE.DynamicDrawUsage);
Я использую BufferGeometry для линий и сеток. Возможно, моя альтернатива состоит в том, чтобы создать новый массив позиций и использовать setAttribute ('position', newPositions) каждый раз, когда я изменяю вещи, но кажется, что это разрушит цель эффективного использования памяти, выделяя новую память каждый раз, когда все меняется.
Спасибо за совет!