如何在三维相机中移动两个距离不同的对象,但使其看起来正交



我想不出要查找的数学类型,但这里有一张图,显示了我所拥有的和我想要的:

透视中的两个对象与正交空间

基本上,我有两个距离相机不同的物体。我希望它们重叠,这样当一个移动时,另一个也会移动。我正在使用透视相机,试图获得模拟的正交效果。我试图弄清楚这一点的原因是,我希望能够在三维空间中单击和拖动某个东西,并将其锁定在光标上,尽管距离不同。我尝试了很多不同的东西,但我对这种水平的数学不太了解,我的搜索结果一无所获。我能想到的最好的是一个比例方程,但我也想不出来。

白色十字光标按鼠标的delta位置移动,而不是使用相机方法(如WorldToScreenPoint(((进行投影。

作为一个附带问题,这就是我最初试图移动光标的方式;我怎样才能做到这一点?我在搜索中找不到任何东西。

非常感谢任何能启发我的人!

您可以为此使用InverseTransformPoint、WorldToScreenPoint和ScreenToWorldPoint。评论中的解释

// assign using method of choice such as with inspector
[SerializeField] Transform whiteTransform;
[SerializeField] Transform redTransform;
// assigned in code below
Camera mainCam;
[SerializeField] float redCrossHairDepth;
// some setup
void Start()
{
// cache main camera;
mainCam = Camera.main;
// get "forward" distance between camera and red crosshair
redCrossHairDepth = mainCam.transform
.InverseTransformPoint(redTransform.position).z;
}

// call me after white position is set
private void SetRedCrossHairBasedOnWhite()
{    
// get screen position of white crosshair
Vector3 whiteScreenPos = mainCam.WorldToScreenPoint(whiteTransform.position);
// assign the red crosshair depth to z component
whiteScreenPos.z = redCrossHairDepth;
// convert back to world space
redTransform.position = mainCam.ScreenToWorldPoint(whiteScreenPos);
}

最新更新