Hice una geometría de esfera con esta función.
let createBall = () => { let geoBall = new THREE.SphereGeometry(5, 32, 16); let mat = new THREE.MeshPhongMaterial({ color: "red", transparent: true }); ball = new THREE.Mesh(geoBall, mat); ball.position.set(0, 5, 0); ball.geometry.dynamic = true; ball.geometry.verticesNeedUpdate = true; ball.geometry.__dirtyVertices = true; scene.add(ball); };y llamo a la función en la función window.onload. También uso dat GUI para editar el atributo de geometría que era el segmento de ancho de la bola. geometría como esta
ballFolder .add(ball.geometry.parameters, "widthSegments", 1, 64, 1) .onChange(function () { console.log(geoBall); ball.geometry.dispose(); ball.geometry = geoBall.clone(); });cuando registro el geoBall en la consola, resulta que el atributo ha cambiado, pero el objeto en sí no ha cambiado. Alguién sabe como solucionar este problema ??
Los valores de los parameters solo se utilizan cuando se crea la geometría. Piense en los generadores de geometría ( BoxGeometry , SphereGeometry , etc.) como métodos de fábrica. Cambiar los parámetros no tiene efecto una vez que se crea el objeto.
Así que le sugiero que cree una nueva geometría en su devolución de llamada onChange() y llame a dispose() en la anterior (lo que ya hace).
Por cierto: en la versión reciente three.js , los objetos de geometría no tienen propiedades dynamic , verticesNeedUpdate y __dirtyVertices .