Angular 三人,爱奥尼亚人,安格拉人2+;-如何修改position BufferGeometry/BufferAttribute值-它表示索引签名ArrayLike<;数量>;是只读的
我拥有在普通js应用程序中使用Three.js的3d实现的一切。我正在为线和网格使用BufferGeometry,我正在修改position属性以修改它们的形状 现在我正在使用Ionic并将3d材质转换为角度组件。除了无法更新bufferAttribute中的position值外,其他一切都正常工作 我在原始js中使用了这个来获取要修改的位置数组: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数组值,如
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:类型“ArrayLikemyMesh.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),但这似乎会在每次更改内容时分配新内存,从而无法实现高效使用内存的目的
谢谢你的建议