關於three.js的大多數教程/問題都建議使用three.js圍繞一個點旋轉對象的方法是在要旋轉的位置創建一個父對象,附加對象,然後移動該子對象。然後,當父母旋轉時,孩子圍繞該點旋轉。例如;在three.js的某個點周圍旋轉物體的正確方法是什麼?
//Make a pivot
var pivot = new THREE.Object3D();
//Make an object
var object = new THREE.Mesh(new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial());
//Add object to pivot
pivot.add(object);
//Move object away from pivot
object.position.set(new THREE.Vector3(5,0,0));
//rotate the object 90 degrees around pivot
pivot.rotation.y = Math.PI/2;
這工作,但它是令人難以置信的限制 - 如果你想繞一個不同點的對象,你不能因爲一個對象不能有兩個家長。
工作的下一個方法是將旋轉矩陣應用到對象的位置,例如:
//Make an object
var object = new THREE.Mesh(new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial());
//Move the object
object.position.set(new THREE.Vector3(5,0,0);
//Create a matrix
var matrix = new THREE.Matrix4();
//Rotate the matrix
matrix.makeRotationY(Math.PI/2);
//rotate the object using the matrix
object.position.applyMatrix4(matrix);
再一次,這個工作,但似乎沒有辦法設置旋轉點。它始終是世界的起源。
另一種選擇是在sceneUtils一個實用的方法來分離從父對象,並附加一個新的父另一種方法的孩子,但該文件警告不要使用它,它從來沒有在任何示例代碼使用。
最終,我希望能夠使一個立方體遵循S形路徑,但沒有這個(看似)基本的東西,我發現它很困難。
tl; dr我想圍繞一系列不同點旋轉一個three.js對象。什麼是解決這個問題的好方法?
看看是否有幫助:https://stackoverflow.com/a/32038265/1461008 – WestLangley
這是有幫助的。謝謝。 – Chris