2016-07-29 69 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 
     }; 
    }; 

请记住,您可能需要补偿画布的定位元素在您的网页中。