Unity3D - Shader - 笛卡尔坐标系

二维笛卡尔坐标系

二维笛卡尔坐标系包含两部分信息:

  1. 一个特殊的位置,原点,是整个坐标系的中心
  2. 两条过原点的相互垂直的矢量,即X轴和Y轴,这些坐标轴也被称为是该坐标系的基矢量。

这里写图片描述

二维笛卡尔坐标系可以帮助我们精确地定位一个点的位置。

三维笛卡尔坐标系

三维笛卡尔坐标系需要3个坐标轴和一个原点。这三个坐标轴被称为该坐标系的基矢量(basis vector)

二维坐标系中:
X轴基矢量:(1, 0)
Y轴基矢量:(0, 1)

三维坐标系中:
X轴基矢量:(1, 0, 0)
Y轴基矢量:(0, 1, 0)
Z轴基矢量:(0, 0, 1)

标准正交基(orthonormal basis):若三个坐标轴之间相互垂直且长度为1,那么这样基矢量被称为标准正交基。

正交基(orthogonal basis):若三个坐标轴之间相互垂直但长度不为1,那么这样的基矢量被称为正交基。

这里写图片描述

坐标系取向

旋向性:若两个坐标系具有相同的旋向性,就可以通过旋转的方式让这两个坐标轴相互重合。

左手坐标系与右手坐标系

三维坐标系中有两种不同的旋向性将坐标系分为了左手坐标系右手坐标系,这两个坐标系无法通过旋转的方式使其完全重合。

若我们右方为X轴正向,我们的头顶为Y轴正向,那么在不同的坐标系中,仅仅是我们的前方所处的Z轴正负不同而已:若我们是在右手坐标系中,那么我们的前方就是Z轴负方向;若我们是在左手坐标系中,那么我们的前方就是Z轴的正方向。

此外,左右坐标系还带来了左右对正向旋转的定义的不同。

这里写图片描述

左右坐标系无优劣之分,绝大多数情况不会影响底层的数学运算,仅在映射到视觉上时有些差别。

Unity中的坐标系

对于模型空间使用的是左手坐标系,也就是说一个物体的右侧(right)、上侧(up)和前侧(forward)分别对应X轴的正方向、Y轴的正方向、Z轴的正方向。

这里写图片描述

对于观察空间使用的是右手坐标系,也就是以摄像机为原点的坐标系。在这个坐标系中,摄像机的右侧(right)、上侧(up)、前方(forward),分别对应X轴的正方向、Y轴的正方向、Z轴的负方向。

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity中,将三维坐标转换为二维坐标需要使用Camera的ScreenToWorldPoint函数。该函数可以将屏幕上的点转换为世界坐标。 首先,你需要获取相机的引用。可以使用Camera.main来获取场景中的主摄像机,或者通过其他方式获取你想要使用的摄像机。 然后,使用Camera.WorldToScreenPoint函数将目标三维坐标转换为屏幕坐标。这个函数接受一个Vector3参数,表示世界坐标。例如,如果你有一个名为targetPosition的Vector3变量,你可以这样调用函数: ```csharp Vector3 screenPoint = Camera.main.WorldToScreenPoint(targetPosition); ``` 这将把目标位置从世界坐标系转换为屏幕坐标系。 最后,如果你需要将屏幕坐标转换为UI坐标(Canvas坐标),你还需要考虑到Canvas的缩放因素。可以使用RectTransformUtility.ScreenPointToLocalPointInRectangle函数将屏幕坐标转换为UI坐标。这个函数接受一个RectTransform参数,表示UI元素的RectTransform组件,以及一个屏幕坐标。 例如,如果你有一个名为canvas的Canvas对象,并且有一个名为uiElement的UI元素,你可以这样调用函数: ```csharp Vector2 localPoint; RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, screenPoint, Camera.main, out localPoint); ``` 现在,localPoint将包含UI元素的坐标,可以在Canvas上使用它来定位UI元素。 这样,你就可以将三维坐标转换为二维坐标,并在Unity中实现相应的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值