Angular 三人,爱奥尼亚人,安格拉人2+;-如何修改position BufferGeometry/BufferAttribute值-它表示索引签名ArrayLike<;数量>;是只读的

Angular 三人,爱奥尼亚人,安格拉人2+;-如何修改position BufferGeometry/BufferAttribute值-它表示索引签名ArrayLike<;数量>;是只读的,angular,typescript,ionic-framework,three.js,buffer-geometry,Angular,Typescript,Ionic Framework,Three.js,Buffer Geometry,我拥有在普通js应用程序中使用Three.js的3d实现的一切。我正在为线和网格使用BufferGeometry,我正在修改position属性以修改它们的形状 现在我正在使用Ionic并将3d材质转换为角度组件。除了无法更新bufferAttribute中的position值外,其他一切都正常工作 我在原始js中使用了这个来获取要修改的位置数组: var vrts = myMesh.geometry.attributes.position.array; 然后我可以修改和设置vrts数组值,如

我拥有在普通js应用程序中使用Three.js的3d实现的一切。我正在为线和网格使用BufferGeometry,我正在修改position属性以修改它们的形状

现在我正在使用Ionic并将3d材质转换为角度组件。除了无法更新bufferAttribute中的position值外,其他一切都正常工作

我在原始js中使用了这个来获取要修改的位置数组:

var vrts = myMesh.geometry.attributes.position.array;
然后我可以修改和设置vrts数组值,如下所示:

vrts[0] = newValue;
然后我将needsUpdate=true设置为:

myMesh.geometry.attributes.position.needsUpdate = true;
在js应用程序中,一切正常

在Ionic应用程序中,当我试图指向获取位置数组时,它说: 类型BufferGeometry | Geometry上不存在属性“attributes” 所以我转换成这个:

vrts = (this.geometry.getAttribute("position"));
现在,我可以通过以下方式访问这些值:

vertexValue = vrts.array[0];
但是,当我尝试修改该值时,即:

vrts.array[0] = newValue;
它说: 错误TS2542:类型“ArrayLike”中的索引签名仅允许读取

并且不允许我修改该值

我在访问needsUpdate变量时也遇到了一些问题。我以前使用过:

myMesh.geometry.attributes.position.needsUpdate = true;
现在已转换为此,但不确定是否正确:

(<THREE.BufferAttribute>vrts).needsUpdate = true;
(vrts).needsUpdate=true;
我还尝试使用以下语句将“positions”数组设置为动态:

(<THREE.BufferAttribute>this._geometry.getAttribute("position")).setUsage(THREE.DynamicDrawUsage);
(this.\u geometry.getAttribute(“位置”)).setUsage(三个.DynamicDrawUsage);
我正在为线和网格使用BufferGeometry。也许我的替代方案是创建一个新的位置数组,并在每次修改内容时使用setAttribute('position',newPositions),但这似乎会在每次更改内容时分配新内存,从而无法实现高效使用内存的目的

谢谢你的建议