2016-07-29 95 views
0

飛機是800像素寬:threejs - 幾何座標系到屏幕座標系

geometry = new THREE.PlaneGeometry(800, 20, 0, 0); 

material = new THREE.MeshBasicMaterial({ 
    color:0xFFFFFF, 
    side:THREE.DoubleSide 
}); 

mesh = new THREE.Mesh(geometry, material); 
mesh.updateMatrixWorld(); 
scene.add(mesh); 

當我試圖操縱它,使得座標系其他垃圾

mesh.geometry.vertices[0].setY(0); 
mesh.geometry.vertices[0].setX(0); 
mesh.geometry.vertices[0].setZ(0); 

mesh.geometry.vertices[1].setY(0); 
mesh.geometry.vertices[1].setX(800); 
mesh.geometry.vertices[1].setZ(0); 

mesh.geometry.vertices[2].setY(20); 
mesh.geometry.vertices[2].setX(0); 
mesh.geometry.vertices[2].setZ(0); 

mesh.geometry.vertices[3].setY(20); 
mesh.geometry.vertices[3].setX(800); 
mesh.geometry.vertices[3].setZ(0); 

mesh.geometry.verticesNeedUpdate = true; 

我可以調整座標幾何對象的系統到相機框架的座標系?

0px = 0

+1

你的問題不是很清楚。 – gaitat

+0

我想將各個頂點放在屏幕座標上。 – Philipp

+0

當你說'0px = 0'時,你的意思是在場景中與屏幕座標一致的每個座標(我假設xy,因爲屏幕沒有az),即矩形@(30,50,10)會(在屏幕上)@(30px,50px)是否正確? – Rush2112

回答

1

我很抱歉,如果這不是你要找的。如果你的意思是,你需要一個的Vector3位置轉換成3D世界在屏幕上的二維像素位置,這是一個典型的轉型:

getScreenTranslation = function (obj, renderer, camera) { 
     var vector = new THREE.Vector3(); 
     var widthHalf = 0.5 * renderer.context.canvas.width; 
     var heightHalf = 0.5 * renderer.context.canvas.height; 

     vector.setFromMatrixPosition(obj.matrixWorld); 
     vector.project(camera); 
     vector.x = vector.x * widthHalf + widthHalf; 
     vector.y = -(vector.y * heightHalf) + heightHalf; 
     return { 
       x: vector.x, 
       y: vector.y 
     }; 
    }; 

請記住,您可能需要補償畫布的定位元素在您的網頁中。