Unity3D的ScreenToWorldPoint和WorldToScreenPoint
阿新 • • 發佈:2019-01-30
這兩個函式是相機Camera類的函式,主要用來作為點在螢幕座標系與世界座標系下的座標相互轉換。
官方文件中的介紹:
ScreenToWorldPoint:從螢幕空間到世界空間的變化位置。螢幕空間以畫素定義。螢幕的左下為(0,0);右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。
WorldToScreenPoint:從世界空間到螢幕空間變換位置。螢幕空間以畫素定義,螢幕左下為(0,0),右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。
這裡關於到螢幕座標的轉換或者由螢幕座標向世界座標系的轉換,關於螢幕座標的部分都是由一個 Vector3
主要討論一下這個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度: