3D坐標(biāo)系

3D坐標(biāo)系是在做3D項(xiàng)目開(kāi)發(fā)中的基礎(chǔ)概念,一般來(lái)說(shuō)3D軟件或者開(kāi)發(fā)工具都是采用笛卡爾坐標(biāo)系來(lái)描述物體的坐標(biāo)信息啡氢。笛卡爾坐標(biāo)系分為左手坐標(biāo)系和右手坐標(biāo)系术裸,左手坐標(biāo)系是Y軸指向上方,X軸指向右方辨绊,Z軸指向前方匹表;左宣鄙,右手坐標(biāo)系的X、Y軸方向相同冻晤,而Z軸是相反的,如圖1.1:

圖1.1

在Unity中使用的是左手坐標(biāo)系设江,其中X軸代表水平方向攘轩,Y軸代表垂直方向,Z軸代表深度歼捏,Unity中游戲?qū)ο蟮淖鴺?biāo)信息是放在一對(duì)括號(hào)里面笨篷,依次按照X、Y率翅、Z軸的順序來(lái)寫的冕臭,例如(2,2,2)瓢棒。

在Unity項(xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)用到不同的坐標(biāo)系來(lái)描述場(chǎng)景空間中的物體位置丘喻,下面就介紹幾種常用的坐標(biāo)系。

1泉粉、全局(世界)坐標(biāo)系

全局坐標(biāo)系是用于描述場(chǎng)景內(nèi)所有物體位置和方向的基準(zhǔn)嗡靡,也稱為世界坐標(biāo)系。在Unity場(chǎng)景中創(chuàng)建的的物體都是以全局坐標(biāo)中的坐標(biāo)原點(diǎn)(0,0,0)來(lái)確定各自的位置讨彼。如圖1.2,我們就創(chuàng)建一個(gè)Cube物體

圖1.2

在Inspector視圖的Transform組件中可以觀察到Cube的坐標(biāo)信息哩至,此時(shí)的Position屬性是(0,0,0)就表示了該物體的全局坐標(biāo)蜜自。我們通常在代碼中用transform.position來(lái)獲取全局坐標(biāo)。

2箭阶、局部坐標(biāo)

Unity場(chǎng)景中戈鲁,每一個(gè)物體都有自己獨(dú)立的坐標(biāo)系,并且會(huì)隨著物體的旋轉(zhuǎn)或者移動(dòng)而改變诈乒,也稱為模型坐標(biāo)系或物體坐標(biāo)系鸣皂;模型mesh保存的頂點(diǎn)均為局部坐標(biāo)系下的坐標(biāo)。Transform組件中Position表示的其實(shí)也是局部坐標(biāo)寞缝,圖1.2中之所以表示的是世界坐標(biāo),是因?yàn)樾聞?chuàng)建的Cube并沒(méi)有父級(jí)滩届,此時(shí)Cube自己就相當(dāng)于自己的父級(jí)被啼,所以它的Position表示的既是自己的局部坐標(biāo)也是世界坐標(biāo)棠枉。在工具欄中單擊Global按鈕可以切換現(xiàn)實(shí)全局坐標(biāo)系和局部坐標(biāo)系泡挺,如圖1.3就是局部坐標(biāo)系

圖1.3

在Unity中娄猫,可以在Hierarchy視圖中將一個(gè)游戲?qū)ο笸系搅硪粋€(gè)對(duì)象上來(lái)建立父子關(guān)系,這樣就使得被拖動(dòng)的物體成為了另一個(gè)物體的子物體媳溺,父子物體的坐標(biāo)系是關(guān)聯(lián)的,此時(shí)子物體會(huì)以父物體的局部坐標(biāo)點(diǎn)為自身的坐標(biāo)原點(diǎn)扯躺,此時(shí)子物體的Position屬性值顯示的就是該物體相對(duì)于父物體的局部坐標(biāo)蝎困。如圖1.4表示了新建的Sphere物體,將以該物體為父物體:

圖1.4

然后我們就把Cube拖到Sphere下钦无,后觀察Cube的Transform組件的變化盖袭。如圖1.5:

圖1.5

可以看出Cube的Position值變成了在相對(duì)于其父物體Sphere局部坐標(biāo)系時(shí)的位置鳄虱。在代碼中我們可以用transform.localposition來(lái)獲取局部坐標(biāo)凭峡。

3、相機(jī)坐標(biāo)系

根據(jù)觀察位置和方向建立的坐標(biāo)系摧冀。使用此坐標(biāo)系可以方便地判斷物體是否在相機(jī)前方以及物體之間的先后遮擋順序等。

4建车、屏幕坐標(biāo)系

屏幕坐標(biāo)系是一個(gè)三維坐標(biāo)系椒惨,Z軸是以相機(jī)的世界單位來(lái)衡量的。該坐標(biāo)系通常用來(lái)描述像素在屏幕上的位置领斥,它的范圍是以左下角為(0,0),右上角為(Screen.width,Screen.height)定義的這樣一個(gè)矩形月洛,就是屏幕的大小。也就是我們的Game視圖导而。
屏幕坐標(biāo)和相機(jī)之間的關(guān)系:Screen.width=Camera.pixelWidth和Screen.height=Camera.pixelHeight這兩個(gè)條件隔崎。例如我們將相機(jī)正對(duì)著場(chǎng)景中的原點(diǎn)(0,0,0),相機(jī)的Z軸分量為-10,按照屏幕坐標(biāo)的定義虚缎,假設(shè)屏幕為800X640的大小钓株,則此時(shí)原點(diǎn)轉(zhuǎn)化為屏幕坐標(biāo)后應(yīng)該是(400,320,10)。下面我們就做一個(gè)屏幕坐標(biāo)的實(shí)驗(yàn)轴合。
我們先創(chuàng)建一個(gè)腳本,寫好代碼讓它可以打印出我們鼠標(biāo)點(diǎn)擊Game視圖時(shí)點(diǎn)擊位置的屏幕坐標(biāo)题涨。
腳本代碼:
<code>
void Start () {

}   
void Update () {
    if (Input.GetMouseButtonDown(0))//判斷是否按下鼠標(biāo)左鍵
    {
        Vector3 vec = Input.mousePosition;//設(shè)一個(gè)三維向量用來(lái)存放鼠標(biāo)點(diǎn)擊時(shí)的坐標(biāo)总滩,此時(shí)Z軸為0
        vec.z = this.transform.position.z;//把Z的坐標(biāo)換做相機(jī)的Z軸坐標(biāo),因?yàn)槟_本在相機(jī)上席函,所以用this點(diǎn)出                      
        print(vec);//打印出鼠標(biāo)按下時(shí)的屏幕坐標(biāo)
    }
}

</code>
我們把這個(gè)腳本放到相機(jī)上面冈涧,然后調(diào)整一下Game視圖的大小,如圖1.6:

圖1.6

最后運(yùn)行項(xiàng)目营曼,在Game視圖中點(diǎn)擊鼠標(biāo)左鍵咽筋,我們分別點(diǎn)擊Game視圖的左下角、右下角蒜危、左上角和右上角,觀察Console視圖的打印內(nèi)容部翘,如圖1.7:

圖1.7

有圖我們得以驗(yàn)證:左下角就是屏幕坐標(biāo)系的原點(diǎn)响委,水平方向就是X軸,垂直方向就是Y軸夹囚,Z軸就是相機(jī)的Z軸坐標(biāo)-4邀窃。

5、視口坐標(biāo)系

視口坐標(biāo)是標(biāo)準(zhǔn)化后的屏幕坐標(biāo)瞬捕。標(biāo)準(zhǔn)化的概念我們可以引申到向量的標(biāo)準(zhǔn)化中,比如一個(gè)向量(x,y)將過(guò)標(biāo)準(zhǔn)化后可以得到一個(gè)單位向量(x’,y’)劣砍。類似地扇救,視口坐標(biāo)是以0到1間的數(shù)字來(lái)表示的,它的范圍是以左下角為(0,0),右上角為(1,1)定義的這樣一個(gè)矩形仅讽。視口坐標(biāo)是一個(gè)3D坐標(biāo)钾挟,Z軸是以相機(jī)的世界單位來(lái)衡量的饱岸。
通過(guò)對(duì)比可以發(fā)現(xiàn)視口坐標(biāo)和屏幕坐標(biāo)特別的相似,所以這里大家可以對(duì)比著來(lái)學(xué)習(xí)汤锨。同樣以屏幕坐標(biāo)中的例子來(lái)將這里的轉(zhuǎn)換百框,例如我們將相機(jī)正對(duì)著場(chǎng)景中的原點(diǎn)(0,0,0),相機(jī)的Z軸分量為-10,按照屏幕坐標(biāo)的定義,假設(shè)屏幕為800X640的大小慎菲,則此時(shí)原點(diǎn)轉(zhuǎn)化為屏幕坐標(biāo)后應(yīng)該是(0.5,0.5,10)锨并。

介紹好坐標(biāo)系,我們下面介紹一下幾種常用的坐標(biāo)系之間的轉(zhuǎn)換方法

1解幼、屏幕坐標(biāo)轉(zhuǎn)世界坐標(biāo)

在Unity3D中通過(guò)camera.ScreenToWorldPoint(Vector3 v)方法可以將一個(gè)屏幕坐標(biāo)轉(zhuǎn)化為世界坐標(biāo)包警。其中,camera是游戲場(chǎng)景中的場(chǎng)景相機(jī)(不一定非要是主相機(jī))害晦。通過(guò)Input.mousePosition或者 Input.touches[0].position可以獲得鼠標(biāo)或者單根手指的屏幕坐標(biāo)篱瞎。

2、世界坐標(biāo)轉(zhuǎn)屏幕坐標(biāo)

在Unity3D中通過(guò)camera.WorldToScreenPoint(Vector3 v)方法可以將一個(gè)世界坐標(biāo)轉(zhuǎn)化為屏幕坐標(biāo)俐筋。其中澄者,camera是游戲場(chǎng)景中的UI相機(jī)。比如我們需要將一個(gè)世界坐標(biāo)轉(zhuǎn)換到NGUI坐標(biāo)的時(shí)候粱挡,可以使用場(chǎng)景相機(jī)將世界坐標(biāo)轉(zhuǎn)為屏幕坐標(biāo),然后再利用UI相機(jī)將屏幕坐標(biāo)轉(zhuǎn)換為世界坐標(biāo)询筏,最后再賦值給NGUI控件榕堰。

3、屏幕坐標(biāo)轉(zhuǎn)視口坐標(biāo)

在Unity3D中可以通過(guò)camera.ScreenToViewportPoint()來(lái)將一個(gè)屏幕坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)嫌套,其中camera是游戲場(chǎng)景中的場(chǎng)景相機(jī)逆屡。

4、世界坐標(biāo)轉(zhuǎn)視口坐標(biāo)

在Unity3D中可以通過(guò)camera.WorldToViewportPoint()來(lái)將一個(gè)世界坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)踱讨,其中camera是游戲場(chǎng)景中的場(chǎng)景相機(jī)魏蔗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市痹筛,隨后出現(xiàn)的幾起案子莺治,更是在濱河造成了極大的恐慌廓鞠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谣旁,死亡現(xiàn)場(chǎng)離奇詭異床佳,居然都是意外死亡蔓挖,警方通過(guò)查閱死者的電腦和手機(jī)夕土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘟判,“玉大人怨绣,你說(shuō)我怎么就攤上這事】交瘢” “怎么了篮撑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)匆瓜。 經(jīng)常有香客問(wèn)我赢笨,道長(zhǎng),這世上最難降的妖魔是什么驮吱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任茧妒,我火速辦了婚禮,結(jié)果婚禮上左冬,老公的妹妹穿的比我還像新娘桐筏。我一直安慰自己,他們只是感情好拇砰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布梅忌。 她就那樣靜靜地躺著,像睡著了一般除破。 火紅的嫁衣襯著肌膚如雪牧氮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天瑰枫,我揣著相機(jī)與錄音踱葛,去河邊找鬼。 笑死躁垛,一個(gè)胖子當(dāng)著我的面吹牛剖毯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播教馆,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擂达!你這毒婦竟也來(lái)了土铺?” 一聲冷哼從身側(cè)響起胶滋,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悲敷,沒(méi)想到半個(gè)月后究恤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡后德,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年部宿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢湃。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡理张,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绵患,到底是詐尸還是另有隱情雾叭,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布落蝙,位于F島的核電站织狐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筏勒。R本人自食惡果不足惜移迫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望管行。 院中可真熱鬧厨埋,春花似錦、人聲如沸病瞳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)套菜。三九已至亲善,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逗柴,已是汗流浹背蛹头。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戏溺,地道東北人渣蜗。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旷祸,于是被迫代替她去往敵國(guó)和親耕拷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 笛卡爾坐標(biāo)系的定義 :1托享、每個(gè)2D笛卡爾坐標(biāo)系都有一個(gè)特殊的點(diǎn)骚烧,稱為原點(diǎn)(0,0)它是坐標(biāo)系的中心浸赫。2、每個(gè)2D笛...
    好怕怕閱讀 3,348評(píng)論 3 8
  • 一赃绊、Unity3D中有哪些坐標(biāo)系既峡? 坐標(biāo)系這個(gè)概念最早是由法國(guó)數(shù)學(xué)家笛卡爾提出的,并由此創(chuàng)造了用代數(shù)方法來(lái)研究幾何...
    OneMore2018閱讀 4,565評(píng)論 0 7
  • 一碧查、 World Space(世界坐標(biāo)) 我們?cè)趫?chǎng)景中添加物體(如:Cube)运敢,他們都是以世界坐標(biāo)顯示在場(chǎng)景中的。...
    HoyaWhite閱讀 2,535評(píng)論 0 0
  • 無(wú)論是2d還是3d游戲開(kāi)發(fā)忠售,圖形學(xué)都是基礎(chǔ)传惠,解析幾何的基本思想是將幾何圖形抽象成點(diǎn)的運(yùn)動(dòng)軌跡,從而點(diǎn)可以作為組成圖...
    tmgg閱讀 12,809評(píng)論 2 4
  • 內(nèi)容簡(jiǎn)介 HUMBLES是七個(gè)英文短語(yǔ)的首字母縮寫档痪,分別代表完美設(shè)計(jì)的七個(gè)階段:抓住全面設(shè)計(jì)的機(jī)會(huì)(Highlig...
    少穻閱讀 559評(píng)論 0 0