Unity3D的ScreenToWorldPoint和WorldToScreenPoint

這兩個函數是相機Camera類的函數,主要用來作爲點在屏幕座標系與世界座標系下的座標相互轉換。


官方文檔中的介紹:

ScreenToWorldPoint:從屏幕空間到世界空間的變化位置。屏幕空間以像素定義。屏幕的左下爲(0,0);右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。

WorldToScreenPoint:從世界空間到屏幕空間變換位置。屏幕空間以像素定義,屏幕左下爲(0,0),右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。

這裏關於到屏幕座標的轉換或者由屏幕座標向世界座標系的轉換,關於屏幕座標的部分都是由一個 Vector3 描述的。針對這個返回值,前兩個分別代表在屏幕座標的x軸與y軸,屏幕左下角爲起點(0,0),水平爲x軸,豎直爲y軸。

主要討論一下這個vector3的第三個值的意義

這個第三個值指的是在世界座標系中,指定的點到相機平面之間的距離,也就是到相機的xy平面的距離,也即物體到相機的連線在相機本體座標系的z軸上的投影。

下面用一個簡單的例子看一下:

首先把一個cube放在(0,0,0)的位置,相機置於(0,0,-10)的位置,z軸正對cube。
在這裏插入圖片描述

此時Log一下cube的positon在屏幕座標系下的位置(用WorldToScreenPoint),發現結果如下,第三個值爲10。
在這裏插入圖片描述

接下來將相機繞Y軸分別旋轉45度與90度,執行同樣的操作。發現45度時第三個值爲10*cos(45度),約爲7.1。當旋轉90度時,第三個值爲0。可以驗證。
45度:
在這裏插入圖片描述
在這裏插入圖片描述
90度:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章