Три JS, Ioni c, Angular2 + - Как изменить значения BufferGeometry / BufferAttribute - в нем указано Signature Signature ArrayLike <number>только для чтения - PullRequest
1 голос
/ 25 февраля 2020

У меня есть все для трехмерной реализации с 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) каждый раз, когда я изменяю вещи, но кажется, что это разрушит цель эффективного использования памяти, выделяя новую память каждый раз, когда все меняется.

Спасибо за совет!

...