Редактирование сетки: треугольники

3+

Реализовал изменение сетки объекта перемещением грани. Но данное решение очень ресурсоёмкое, Это видно, когда в объекте довольно много треугольников. Причиной этому является то, что я создаю вспомогательный треугольник для каждого треугольника объекта, и при движении треугольника все их удаляю и создаю заново.

В качестве решения решил делать вспомогательный треугольник только для того треугольника, который собираюсь двигать. Сейчас для этого реализовал создание такого треугольника при движении мыши. Так будет подсвечиваться треугольник, который можно выбрать

transformMesh( editHelper ) {

		if( this.mode === 'Vertices'){

			this.moveVertex( editHelper.object.userData.vertexNumber, editHelper.object.position );

		}

		if( this.mode === "Faces" ){

			let sphereName = editHelper.object.name;

			let face = editHelper.object.parent.getObjectByName( editHelper.object.name.replace('Sphere','') );
			let sphere = editHelper.object;

			let shift = sphere.position;

			shift.subVectors( sphere.position, face.userData.baryCenter )

			face.position.set( shift.x, shift.y, shift.z );

			let attrArray = face.geometry.attributes.position.array;
			let vertices = [];

			for (let i = 0; i < attrArray.length; i += 3 ) {

				vertices.push( new Vector3( attrArray[i], attrArray[i+1], attrArray[i+2]));
		
			}

			let verticesNumbers = face.userData.verticesNumbers;

			for (let i = 0; i < verticesNumbers.length; i ++ ) {

				let pointNumber = verticesNumbers[ i ];

				let point = vertices[ i ].clone();

				let pointPosition = point.add( face.position.clone() ).clone();

				this.moveVertex( pointNumber, pointPosition );

				this.removeMeshHelpers();
				this.createMeshHelpers();

				let sphere = this.ta_Scene.scene.getObjectByName( sphereName );

				this.ta_Scene.transformControls.attach( sphere );

			}


		}

	}
3+