我正在嘗試使用Three.js執行單擊以放大功能,我在畫布上放置了一個畫布和一個對象。單擊時我試圖放置相機靠近交點(實際上就像縮小那個點)。單擊以將相機放置在三個js中的對象附近
這是我所做的,但沒有按照我想要的方式工作,點擊相機位置變化,但有些作品局部有時相機放置在交叉點附近,有些時候沒有。
onmousedown = function (event) {
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
event.preventDefault();
mouse.x = (event.clientX/self.renderer.domElement.clientWidth) * 2 - 1;
mouse.y = -(event.clientY/self.renderer.domElement.clientHeight) * 2 + 1;
raycaster.setFromCamera(mouse, self.camera);
var objects = [];
for (var i = 0; i < self.scene.children.length; i++) {
if (self.scene.children[i] instanceof THREE.Group) {
objects.push(self.scene.children[i]);
}
}
console.log(objects);
var intersects = raycaster.intersectObjects(objects,true);
console.log(intersects.length);
if (intersects.length > 0) {
self.camera.up = new THREE.Vector3(0, 0, 1);
self.camera.lookAt(new THREE.Vector3(0, 0, 0));
self.camera.position.z = intersects[0].point.z * .9;
self.camera.position.x = intersects[0].point.x * .9;
self.camera.position.y = intersects[0].point.y * .9;
}
};
這裏self
是一個全球性的觀衆對象保持照相機,帆布,不同的對象等
0.9僅僅是用來放置相機在靠近交叉點的數。使用
相機PerspectiveCamera
和控制是TrackballControls
new THREE.PerspectiveCamera(90, this.width/this.height, 1, 1000);
加載的對象是從.OBJ或.dae文件,我希望這像click工作在對象上任何一點並把相機靠近會點。但相機正在移動,但有時不在我點擊的位置附近。
- 是否
intersects[0]
給出了最近的交叉點?或在相機的方向最近? - 這裏我的錯誤是什麼?
我是三個js的新手,剛開始學習它。如果某件事或一些邏輯錯誤幫助我。
會檢查,謝謝你的時間。 –
對我而言並不完全合適,請你解釋你計劃如何計算長度。 –
長度是由您選擇的任意值,並指定從相機到相交點的最終距離。 –