Работа с панелью параметров — Dragon3DGraff_Blog

Работа с панелью параметров

1+

При выделении отображается панель с параметрами. Добавил BoundingBox при выделении объекта.
При изменении значения в панели параметров меняется геометрия выделенного объекта. Сделал пока для шара и то криво, просто проверить, что работает. Дело в том, что при изменении параметра в геометрии Object3D, геометрия не перестраивается. Чтобы перестроилась геометрия нужно вызвать new THREE.SphereGeometry. Для куба, соответственно, new THREE.BoxGeometry, и так далее для каждого объекта.
Поэтому решено в классе Entity создать метод createGeometry(), в котором в зависимости от типа объекта буду генерировать новую геометрию:

let TA_Entities = function () {

	let GLOBALSCOPE = this;

	this.createGeometry = function ( geometryType ) {

		let geometry = null;

		switch ( geometryType, params ) {
			case 'BoxBufferGeometry':

					let data = {
						width: params.width,
						height: params.height,
						depth: params.depth,
						widthSegments: params.widthSegments,
						heightSegments: params.heightSegments,
						depthSegments: params.depthSegments
					};

					geometry = new BoxBufferGeometry(
						data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments
					);
				
				break;
		
			default:
				break;
		}

		return geometry;
	}

Соответственно изменю и функцию создания объектов. Сейчас при создании удаляется старый объект и в этой же точке создается новый, что сказывается на быстродействии. Я же буду менять только geometry с объекте Object3D. Примерно так:

let geom = entity.geometry;

let newGeom = new THREE.SphereGeometry( 
  +input.value,
  geom.parameters.widthSegments,
  geom.parameters.heightSegments,
  geom.parameters.phiStart,
  geom.parameters.phiLength,
  geom.parameters.thetaStart,
  geom.parameters.thetaLength
);

entity.geometry.dispose();
entity.geometry = newGeom; 
1+

Добавить комментарий