2016-07-29 13 views
0

die Ebene 800px Breite:threejs - Geometrie System Koordinatensystem zu screenen koordiniert

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); 

wenn ich versuche, es zu manipulieren, macht das Koordinatensystem andere Junk

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; 

Ich kann die justieren Koordinate System des Geometrieobjekts zum Koordinatensystem des Kamerarahmens?

0px = 0

+1

Ihre Frage ist nicht sehr klar. – gaitat

+0

Ich möchte einzelne Scheitelpunkte auf Bildschirmkoordinaten setzen. – Philipp

+0

Wenn Sie "0px = 0" sagen, meinen Sie, dass jede Koordinate (ich nehme xy, da der Bildschirm keinz hat) in der Szene mit den Koordinaten des Bildschirms ausgerichtet ist, dh ein Rechteck @ (30,50,10) würde sein (auf dem Bildschirm) @ (30px, 50px) richtig? – Rush2112

Antwort

1

ich entschuldige mich, wenn dies ist nicht das, was Sie suchen. Wenn Sie meinen, dass Sie eine vector3 Position in der 3D-Welt zu seiner 2d Pixelposition auf dem Bildschirm konvertieren müssen, ist hier eine typische Transformation:

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 
     }; 
    }; 

Denken Sie daran, dass Sie benötigen für die Positionierung der Leinwand zu kompensieren Element in Ihrer Webseite.