2012-10-05 43 views

Respuesta

15

Supongo que lo que quieres decir es que quieres que un objeto gire alrededor de un punto específico dentro de su geometría. Por ejemplo, cylinderGeometry gira alrededor de centro. Supongamos que desea rotar alrededor de su final.

Lo que debe hacer es traducir la geometría del cilindro inmediatamente después de haberla creado, de modo que el punto deseado dentro de la geometría esté ahora en el origen.

geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, cylinderHeight/2, 0)); 

EDIT: Ahora puede hacer esto, en su lugar:

geometry.translate(0, cylinderHeight/2, 0); // three.js r.72 

Ahora, cuando se gira el cilindro, y pasará a girar alrededor de su extremo, en lugar de su medio.

El extremo que gira alrededor también estará ubicado en la posición que ha configurado para la malla del cilindro.

Obviamente, puede hacer esto con cualquier geometría, no solo con cilindros.

+0

Gracias, funciona. pero en el caso de la geometría del tubo, ¿cómo coloco el ayudante del eje en el borde del tubo o, en otras palabras, el ayudante del eje en cada punto del segmento para que el usuario pueda girar o girar el tubo? Por favor, eche un vistazo a mi otra pregunta en [enlace] (http://stackoverflow.com/questions/12776933/three-js-rotate-tube-geometry-from-segment-point-and-show-different-values) - @ WestLangley – Valay

+0

¿Puedes ayudar a hacer girar la geometría del tubo de esa manera? Quiero girar una parte particular de la geometría del tubo. Cuando giro, todo el tubo gira. – Valay

+0

Necesitas hacer una nueva publicación. – WestLangley

5

Para dar un ejemplo de código de la respuesta anterior de WestLangley:

// CYLINDER 
var cyl_material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); 
var cyl_width = 1; 
var cyl_height = 5; 
// THREE.CylinderGeometry(bottomRadius, topRadius, height, segmentsRadius, segmentsHeight, openEnded) 
var cylGeometry = new THREE.CylinderGeometry(cyl_width, cyl_width, cyl_height, 20, 1, false); 
// translate the cylinder geometry so that the desired point within the geometry is now at the origin 
cylGeometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, cyl_height/2, 0)); 
var cylinder = new THREE.Mesh(cylGeometry, cyl_material); 

scene.add(cylinder);  

ahora las obras de rotación alrededor del origen del cilindro:

cylinder.rotation.x = 0.5*Math.PI; 

Espero que ayude.

+0

Gracias, ¡me has ayudado mucho! – bernhardrusch

Cuestiones relacionadas