2015-01-15 463 views
0

您好,我在three.js中有一個寬度爲5000和高度爲5000的平面。用下面的代碼將3d座標轉換爲2d,更具體的我得到左上角的點飛機和右下角。 我用位置x:0,y:0,z:70000和旋轉x:0,y:0,z:0初始化我的相機。將3d座標轉換爲2D座標(平面網格)

如果我不(使用軌道控制)轉動我的相機,我得到的座標是正確的:

enter image description here

但是如果我轉動我的相機的座標是不正確的,我不能找出原因。 這裏是我到目前爲止的代碼:

var vec3 = new THREE.Vector3(); 
    vec3.set(_that.model.position.x - 2500, _that.model.position.y + 2500, _that.model.position.z); // top left corner 
    vec3.project(_that.vise.camera); 

var percX = Math.abs(vec3.x + 1)/2; 
var percY = Math.abs(-vec3.y + 1)/2; 

this.topLeft = { 
    x : percX * _that.vise.options.generic.container.clientWidth, 
    y : percY * _that.vise.options.generic.container.clientHeight 
} 

var vec4 = new THREE.Vector3(); 
    vec4.set(_that.model.position.x + 2500, _that.model.position.y - 2500, _that.model.position.z); // top left corner 
    vec4.project(_that.vise.camera); 

var percX = Math.abs(vec4.x + 1)/2; 
var percY = Math.abs(-vec4.y + 1)/2; 

this.bottomRight = { 
    x : percX * _that.vise.options.generic.container.clientWidth, 
    y : percY * _that.vise.options.generic.container.clientHeight 
} 

this.projectedVector = { 
    x : Math.abs(this.topLeft.x - this.bottomRight.x), 
    y : Math.abs(this.topLeft.y - this.bottomRight.y) 
} 

回答

0

拿上這個一看:

http://www.threejsgames.com/extensions/#threex.objcoord

它包括3D的轉換到屏幕位置,這是你想要的嗎?

+0

它不適用於three.js – Syd

+0

的當前版本(r70),除非我做錯了什麼......我試過使用這個擴展 – Syd

+1

檢查你的控制檯,有一些變化,所以你必須更新這個。 – mcode

相關問題