我试图让一些3D文字跟随移动的立方体。我希望文本始终平滑地显示在屏幕上,就好像在屏幕空间中移动一样(即使它会在所有轴上移动)。所以它需要在移动时朝向相机进行旋转校正。我试图通过这里(Converting 3D position to 2d screen position [r69!])来调整答案以进行定位及其工作,但我最后的计算(* 1000)是完整的猜测工作(参见下面的函数)。它应该是什么?我如何解决相机的旋转校正?
function toScreenPosition(obj, camera)
{
var vector = new THREE.Vector3();
//var widthHalf = 0.5*renderer.context.canvas.width;
//var heightHalf = 0.5*renderer.context.canvas.height;
obj.updateMatrixWorld();
vector.setFromMatrixPosition(obj.matrixWorld);
vector.project(camera);
//vector.x = ( vector.x * widthHalf ) + widthHalf;
//vector.y = - ( vector.y * heightHalf ) + heightHalf;
//how should I be calculating position here?
vector.x = vector.x * 1000;
vector.y = - vector.y * 1000;
console.log(vector.x + 'px, ' + vector.y + 'px');
return {
x: vector.x,
y: vector.y
};
}
我的完整工作示例如下: http://www.asquare.org/in-progress/webgldemo/rotation-test.html
答案 0 :(得分:0)
您只需要将obj的lookAt设置为相机:
obj.lookAt( camera.position );