2013-01-08 12 views
16

Trong three.js, tôi muốn thêm một lưới đến một vị trí trong cảnhLàm thế nào tôi có thể thiết lập vị trí của một lưới trước khi tôi thêm nó vào cảnh trong three.js

Tôi đã thử:

// mesh is a THREE.Mesh 
scene is a THREE.Scene 
scene.add(mesh) 
scene.updateMatrixWorld(true) 
mesh.matrixWorld.setPosition(new THREE.Vector3(100, 100, 100)) 
scene.updateMatrix() 

NHƯNG nó không ảnh hưởng gì cả.

Tôi nên làm gì?

Trả lời

42

tôi sẽ khuyên bạn nên kiểm tra documenation qua ở đây: http://threejs.org/docs/#Reference/Objects/Mesh Như bạn có thể nhìn thấy trên đỉnh của docu-page, Lưới được thừa hưởng từ "Object3D". Điều đó có nghĩa là bạn có thể sử dụng tất cả các phương thức hoặc thuộc tính được cung cấp bởi Object3D. Vì vậy, hãy nhấp vào liên kết "Object3D" trên trang docu và kiểm tra danh sách thuộc tính. Bạn sẽ tìm thấy đúng ".position". Nhấp vào ".position" để xem loại dữ liệu đó là gì. Paha..its Vector3.

Vì vậy, cố gắng làm như sau:

//scene is a THREE.Scene 
scene.add(mesh); 
mesh.position.set(100, 100, 100); 
+9

không chỉ cung cấp câu trả lời cho bạn. bạn cũng dạy cách sử dụng tài liệu! – Novalis

+4

Đây là câu trả lời đúng. Sử dụng mesh.position.set (x, y, z) vì bạn sẽ không cần cập nhật lực, nếu bạn đặt mesh.position = xxx, bạn chỉ thay đổi thuộc tính đối tượng, không phải lúc nào cũng di chuyển đối tượng trong cảnh thời gian thực. position.set là coplex nhiều hơn và luôn di chuyển đối tượng đến đích và refresh buffer, lights, shadows etc ... trong một lần. – Martin

+0

Tôi đã thử điều này, và không thể tìm ra những gì nó thực sự đang làm. Nếu tôi vẽ một điểm, nó ở đúng vị trí. Nhưng nếu tôi tạo ra một lưới, và cố gắng thiết lập vị trí, nó chỉ xuất hiện ở một số nơi dường như ngẫu nhiên. – Zendel

24

tôi thấy nó trên một github trước đó. (Three.js r71)

mesh.position.set(100, 100, 100); 

và có thể được thực hiện đối với cá nhân

mesh.position.setX(200); 
mesh.position.setZ(200); 

referance: https://threejs.org/docs/#api/math/Vector3

giải thích chi tiết dưới:

từ mesh.position là " Vector3 ". Vector3() có phương thức setX() setY() và setZ(). chúng ta có thể sử dụng nó như thế này.

mesh.position = new THREE.Vector3() ; //see position is Vector3() 
vector1 = new THREE.Vector3(); 

mesh.position.setX(100); //or this 
vector1.setX(100)   // because all of them is Vector3() 
camera1.position.setZ(100); // or this 
light1.position.setY(100) // applicable to any object.position 
+1

Điều này phù hợp với tôi, trong khi câu trả lời của chysmann thì không, mặc dù tôi không thể giải thích tại sao nó không có/không. Bạn có thể giải thích về những gì bạn có nghĩa là "nhìn thấy nó trên github"? – Nate

+0

tôi thấy nó trên trang github three.js. nhưng icant tìm nguồn ngay bây giờ –

+2

Đây là câu trả lời đúng. Sử dụng mesh.position.set (x, y, z) vì bạn sẽ không cần cập nhật lực, nếu bạn đặt mesh.position = xxx, bạn chỉ thay đổi thuộc tính đối tượng, không phải lúc nào cũng di chuyển đối tượng trong cảnh thời gian thực. position.set là coplex nhiều hơn và luôn di chuyển đối tượng đến đích và refresh buffer, lights, shadows etc ... trong một lần. – Martin