2014-04-15 67 views
0

前我看了這個問題:three.js所二維X,Y COORDS到3D X,Y,Z COORDS總是在相機

Mouse/Canvas X, Y to Three.js World X, Y, Z

,並已在我的代碼中實現它,則問題在於,我似乎無法像其他人所說的那樣開展工作。

我需要通過X和Y屏幕座標在相機前面放置一個物體,而不一定是通過鼠標。

該對象將位於攝像機前面的指定距離處,既可以來自預定義的最大距離,也可以來自計算的物距。

注:我的相機可以在我的場景中的任何位置和朝向任何方向

這裏是我的代碼:

this.reticlePos.x = 500; 
this.reticlePos.y = 300; 
this.reticlePos.z = 0.5; 

this.projector.unprojectVector(this.reticlePos, this.camera); 

//check for collisions, if collisions set distance to collision distance 
var distance = this.RETICLE_RADIUS; 

var direction = new THREE.Vector3(0, 0, -1); 
direction.applyQuaternion(this.camera.quaternion); 

this.rayCaster.set(this.camera.position, direction); 
var collisionResults = this.rayCaster.intersectObjects(this.sceneController.obstacles); 

if(collisionResults.length !== 0) { 
    // console.log('Ray collides with mesh. Distance :' + collisionResults[0].distance); 
    distance = collisionResults[0].distance - 20; 
} 

// set the reticle position 
var dir = this.reticlePos.clone().sub(this.camera.position).normalize(); 

var pos = this.camera.position.clone().add(dir.multiplyScalar(distance)); 

this.reticleMesh.position.copy(pos); 

正如你所看到的是非常相似的鏈接的問題,但我無法在相機前看到物體。

任何對此的深入瞭解將不勝感激。

回答

1

我自己想出了答案,對於後來檢查這個問題的任何人。

爲了讓我的屏幕座標我需要一些輸入數據從一個陀螺儀轉換,並沒有意識到,我仍然需要做以下我的計算屏幕座標:

this.reticlePos.x = (this.reticlePos.x/window.innerWidth) * 2 - 1; 
this.reticlePos.y = - (this.reticlePos.y/window.innerHeight) * 2 + 1; 

這樣做了以後,一切按預期工作。

相關問題