国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity坐標(biāo)系、相互轉(zhuǎn)換和相對(duì)自身的方位及角度。

這篇具有很好參考價(jià)值的文章主要介紹了Unity坐標(biāo)系、相互轉(zhuǎn)換和相對(duì)自身的方位及角度。。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、Unity的4種坐標(biāo)系

Unity坐標(biāo)系、相互轉(zhuǎn)換和相對(duì)自身的方位及角度。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-496113.html

1, World Space(世界坐標(biāo)):
我們?cè)趫?chǎng)景中添加物體(如:Cube),他們都是以世界坐標(biāo)顯示在場(chǎng)景中的。transform.position可以獲得該位置坐標(biāo)。

2, Screen Space(屏幕坐標(biāo)):
以像素來(lái)定義的,以屏幕的左下角為(0,0)點(diǎn),右上角為(Screen.width,Screen.height),Z的位置是以相機(jī)的世界單位來(lái)衡量的。
注:鼠標(biāo)位置坐標(biāo)屬于屏幕坐標(biāo),Input.mousePosition可以獲得該位置坐標(biāo),手指觸摸屏幕也為屏幕坐標(biāo),Input.GetTouch(0).position可以獲得單個(gè)手指觸摸屏幕坐標(biāo)。

3.ViewPort Space(視口坐標(biāo)):
視口坐標(biāo)是標(biāo)準(zhǔn)的和相對(duì)于相機(jī)的。相機(jī)的左下角為(0,0)點(diǎn),右上角為(1,1)點(diǎn),Z的位置是以相機(jī)的世界單位來(lái)衡量的。

4, 繪制GUI界面的坐標(biāo)系:
這個(gè)坐標(biāo)系與屏幕坐標(biāo)系相似,不同的是該坐標(biāo)系以屏幕的左上角為(0,0)點(diǎn),右下角為(Screen.width,Screen.height)。

【四種坐標(biāo)系的轉(zhuǎn)換】

1、世界坐標(biāo)→屏幕坐標(biāo):camera.WorldToScreenPoint(transform.position);這樣可以將世界坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)。其中camera為場(chǎng)景中的camera對(duì)象。

2、屏幕坐標(biāo)→視口坐標(biāo):camera.ScreenToViewportPoint(Input.GetTouch(0).position);這樣可以將屏幕坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)。其中camera為場(chǎng)景中的camera對(duì)象。

3、視口坐標(biāo)→屏幕坐標(biāo):camera.ViewportToScreenPoint();

4、視口坐標(biāo)→世界坐標(biāo):camera.ViewportToWorldPoint();
二、Unity坐標(biāo)系間的相互轉(zhuǎn)換
全局坐標(biāo)和局部坐標(biāo)
點(diǎn)的坐標(biāo)轉(zhuǎn)換
Transform.TransformPoint(Vector3 position); 將一個(gè)坐標(biāo)點(diǎn)從相對(duì)transform的局部坐標(biāo)系轉(zhuǎn)換為全局坐標(biāo)系
Transform.InverseTransformPoint(Vector3 position); 將坐標(biāo)點(diǎn)從全局坐標(biāo)系轉(zhuǎn)換到相對(duì)transform的局部坐標(biāo)系

方向的坐標(biāo)轉(zhuǎn)換
Transform.TransformDirection(Vector3 direction); 將一個(gè)方向從局部坐標(biāo)系轉(zhuǎn)換到全局坐標(biāo)系
Transform.InverseTransformDirection(Vector3 direction); 將一個(gè)方向從全局坐標(biāo)系轉(zhuǎn)換到局部坐標(biāo)系
Transform.TransformVector(Vector3 vector); 將一個(gè)向量從局部坐標(biāo)系轉(zhuǎn)換到全局坐標(biāo)系
Transform.InverseTransformVector(Vector3 vector); 將一個(gè)向量從全局坐標(biāo)系轉(zhuǎn)換到局部坐標(biāo)系

屏幕坐標(biāo)系和全局坐標(biāo)系
Camera.ScreenToWorldPoint(Vector3 position); 將屏幕坐標(biāo)系轉(zhuǎn)換為全局坐標(biāo)系
Camera.WorldToScreenPoint(Vector3 position); 將全局坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)
Input.mousePosition;? 獲取鼠標(biāo)在屏幕中的坐標(biāo)

例子: 屏幕坐標(biāo)轉(zhuǎn)為世界坐標(biāo)
??????? Vector3 mousePos = Input.mousePosition;
??????? Vector3 SToW = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x,mousePos.y,1));

視口坐標(biāo)(屏幕坐標(biāo)的單位化,最大值是1)和屏幕坐標(biāo)的轉(zhuǎn)換 ?
Camera.ScreenToViewportPoint(Vector3 position); 將屏幕坐標(biāo)轉(zhuǎn)為視口坐標(biāo)
Camera.ViewPortToScreenPoint(Vector3 position); 將視口坐標(biāo)轉(zhuǎn)為屏幕坐標(biāo)

世界坐標(biāo)與視口坐標(biāo) 轉(zhuǎn)換
Camera.WorldToViewportPoint(Vector3 position); 將全局坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)
Camera.ViewportWorldPoint(Vector3 position); 將視口坐標(biāo)轉(zhuǎn)換為全局坐標(biāo)
三、Unity判斷相對(duì)于自身的方位和角度????
[csharp] view plain copy
??? //求角度 及前后左右方位 ?
??? public void checkTargetDirForMe(Transform target) ?
??? { ?
??????? //xuqiTest:? target.position = new Vector3(3, 0, 5); ?
??????? Vector3 dir = target.position - transform.position; //位置差,方向 ?

??????? //方式1?? 點(diǎn)乘 ?
??????? //點(diǎn)積的計(jì)算方式為: a·b =| a |·| b | cos < a,b > 其中 | a | 和 | b | 表示向量的模 。 ?
??????? float dot = Vector3.Dot(transform.forward, dir.normalized);//點(diǎn)乘判斷前后:dot >0在前,<0在后
??????? float dot1 = Vector3.Dot(transform.right, dir.normalized);//點(diǎn)乘判斷左右: dot1>0在右,<0在左
??????? float angle = Mathf.Acos(Vector3.Dot(transform.forward.normalized, dir.normalized)) * Mathf.Rad2Deg;//通過(guò)點(diǎn)乘求出夾角 ?
???? ?
??????? //方式2?? 叉乘 ?
??????? //叉乘滿足右手準(zhǔn)則? 公式:模長(zhǎng)|c|=|a||b|sin?? ?
??????? Vector3 cross = Vector3.Cross(transform.forward, dir.normalized);//叉乘判斷左右:cross.y>0在左,<0在右? ?
??????? Vector3 cross1 = Vector3.Cross(transform.right, dir.normalized); //叉乘判斷前后:cross.y>0在前,<0在后? ?
??????? angle = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(transform.forward.normalized, dir.normalized))) * Mathf.Rad2Deg; ?
???????? ?
??? } ?

// 判斷物體是否在眼前 和 背后? fangxiang>0在眼前 , <0在背后
Vector3 dir =? target.transform.position - fpsPlayer.transform.position;
fangxiang = Vector3.Dot(fpsPlayer.transform.forward, dir.normalized);

1.判斷目標(biāo)在自己的前后方位可以使用下面的方法:
?? Vector3.Dot(transform.forward, target.position)
?????? 返回值為正時(shí),目標(biāo)在自己的前方,反之在自己的后方

2.判斷目標(biāo)在機(jī)子的左右方位可以使用下面的方法:
?? Vector3.Cross(transform.forward, target.position).y
????? 返回值為正時(shí),目標(biāo)在自己的右方,反之在自己的左方

3.在這里順便解說(shuō)下關(guān)于空間向量的點(diǎn)積和叉積:
A.點(diǎn)積
? 點(diǎn)積的計(jì)算方式為:? a·b=|a|·|b|cos? 其中|a|和|b|表示向量的模,
表示兩個(gè)向量的夾角。另外在 點(diǎn)積 中,和 夾角是不分順序的。
? 所以通過(guò)點(diǎn)積,我們其實(shí)是可以計(jì)算兩個(gè)向量的夾角的。
? 另外通過(guò)點(diǎn)積的計(jì)算我們可以簡(jiǎn)單粗略的判斷當(dāng)前物體是否朝向另外一個(gè)物體: 只需要計(jì)算當(dāng)前物體的transform.forward向量與 otherObj.transform.position 的點(diǎn)積即可, 大于0則在前方,否則在后方。

B.叉積
? 叉積的定義: c =a x b? 其中a,b,c均為向量。即兩個(gè)向量的叉積得到的還是向量!??? 性質(zhì)1: c⊥a,c⊥b,即向量c垂直與向量a,b所在的平面 。??? 性質(zhì)2: 模長(zhǎng)|c|=|a||b|sin??? 性質(zhì)3: 滿足右手法則 。從這點(diǎn)我們有axb ≠ bxa,而axb = – bxa。所以我們可以使用叉積的正負(fù)值來(lái)判斷向量a,b的相對(duì)位置,即向量b是處于向量a的順時(shí)針?lè)较蜻€是逆時(shí)針?lè)较?/span>
4.配合使用
在Unity中,一般的rpg基本可以滿足了,但是在一些特定定制功能中,要求比較苛刻,配合Unity相機(jī)視野范圍使用。(比如要求,要在視野范圍內(nèi),而且目標(biāo)物體不是npc,不能轉(zhuǎn)身,方向是固定的,要判斷是否在物體正面還是背面的需求)。
案例:??????
 void OnBecameVisible()
??????? {
??????????? //Debug.LogError(this.name + "攝像機(jī)視野內(nèi)");
??????????? isVisib = true;
??????? }

??????? void OnBecameInvisible()
??????? {
??????????? //Debug.LogError(this.name + "在攝像機(jī)視野外");
??????????? isVisib = false;
??????? }

private void Update()
??????? {
??????????? if (isVisib)
??????????? {
???????????????
??????????????? Vector3 cross = this.transform.InverseTransformPoint(GFGlobal.Instance.FPSPlayerObj.transform.position);
?????????????? ?
??????????????? if (cross.x > 0)
??????????????? {
??????????????????? if (_mediaPlayer)
??????????????????? {
??????????????????????? dist = Vector3.Distance(GFGlobal.Instance.FPSPlayerObj.transform.position, this.transform.position);

??????????????????????? if(dist <= maxPauseDis)
??????????????????????? {
??????????????????????????? mPlayerPlay();
??????????????????????? }else
??????????????????????? {
??????????????????????????? mPlayerPause();
??????????????????????? }
?????????????????????? ?
??????????????????????? if (dist <= minDis)
??????????????????????? {
??????????????????????????? volume = maxvol;
??????????????????????? }
??????????????????????? else if (dist > maxDis)
??????????????????????? {
??????????????????????????? volume = 0f;
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? volume = (dist - b) / p;
??????????????????????? }
??????????????????????? _mediaPlayer.Control.SetVolume(volume);
??????????????????? }
??????????????? }
??????????????? else
??????????????? {
??????????????????? mPlayerPause();
??????????????? }
??????????? }

??????????? // 判斷物體是否在眼前 和 背后? fangxiang>0在眼前 , <0在背后
??????????? //Vector3 dir =? this.transform.position - fpsPlayer.transform.position;
??????????? //fangxiang = Vector3.Dot(fpsPlayer.transform.forward, dir.normalized);
??????? }

到了這里,關(guān)于Unity坐標(biāo)系、相互轉(zhuǎn)換和相對(duì)自身的方位及角度。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity坐標(biāo)系的轉(zhuǎn)換—世界坐標(biāo)轉(zhuǎn)為UI坐標(biāo)

    直接調(diào)用WorldToAnchorPos,傳入對(duì)應(yīng)的參數(shù)返回UGUI坐標(biāo)

    2024年04月13日
    瀏覽(24)
  • UE和Unity坐標(biāo)系轉(zhuǎn)換

    UE和Unity坐標(biāo)系轉(zhuǎn)換

    內(nèi)容將會(huì)持續(xù)更新,有錯(cuò)誤的地方歡迎指正,謝謝! ? UE和Unity坐標(biāo)系轉(zhuǎn)換 ? ? ? TechX 堅(jiān)持將創(chuàng)新的科技帶給世界! 擁有更好的學(xué)習(xí)體驗(yàn) —— 不斷努力,不斷進(jìn)步,不斷探索 TechX —— 心探索、心進(jìn)取! 助力快速掌握 UE和Unity 坐標(biāo)系轉(zhuǎn)換 為初學(xué)者節(jié)省寶貴的學(xué)習(xí)時(shí)間,避免

    2024年01月19日
    瀏覽(26)
  • 位姿估計(jì) | 目標(biāo)體坐標(biāo)系相對(duì)于相機(jī)坐標(biāo)系的位姿估計(jì)及其Python代碼

    位姿估計(jì) | 目標(biāo)體坐標(biāo)系相對(duì)于相機(jī)坐標(biāo)系的位姿估計(jì)及其Python代碼

    本文接著分享空間目標(biāo)位姿跟蹤和濾波算法中用到的一些常用內(nèi)容,希望為后來(lái)者減少一些基礎(chǔ)性內(nèi)容的工作時(shí)間。以往分享總結(jié)見(jiàn)文章:位姿跟蹤 | 相關(guān)內(nèi)容目錄和鏈接總結(jié)(不斷更新中~~~) 本文介紹如何 利用特征點(diǎn)求解目標(biāo)體坐標(biāo)系相對(duì)于相機(jī)坐標(biāo)系的位姿 。 PnP(Pe

    2024年02月10日
    瀏覽(30)
  • 激光雷達(dá)坐標(biāo)系和相機(jī)坐標(biāo)系相互變換(易懂不詳細(xì))

    激光雷達(dá)坐標(biāo)系和相機(jī)坐標(biāo)系相互變換(易懂不詳細(xì))

    碼字不易,路過(guò)的朋友動(dòng)動(dòng)小手點(diǎn)點(diǎn)贊吧 傳感器融合少不了的就是聯(lián)合標(biāo)定,最近大火的激光雷達(dá)和相機(jī)傳感器融合算法,讓很多工程師學(xué)者投入精力學(xué)習(xí),本文簡(jiǎn)單介紹一下激光雷達(dá)和相機(jī)傳感器坐標(biāo)系轉(zhuǎn)換的原理。 ????????傳感器安裝位置不同,而且每個(gè)傳感器都有

    2024年02月11日
    瀏覽(21)
  • 機(jī)器人坐標(biāo)系轉(zhuǎn)換從局部坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系

    機(jī)器人坐標(biāo)系轉(zhuǎn)換從局部坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系

    矩陣方式: 下面是代碼: 函數(shù)方式: 根據(jù)三角函數(shù)的特性,可以進(jìn)行一下簡(jiǎn)化: 下面是簡(jiǎn)化前的代碼示例:

    2024年04月16日
    瀏覽(21)
  • RTKLIB——坐標(biāo)系相互轉(zhuǎn)換(ecef2pos,pos2ecef,ecef2enu,enu2ecef)

    本文代碼選自RTKLIB_2.4.2版本,文中所有代碼均在rtkcmn.c源文件中,宏定義在頭文件中。 宏定義 上述定義分別對(duì)應(yīng):圓周率PI,WGS84橢球長(zhǎng)半軸,WGS84橢球扁率。 工具 函數(shù) dot函數(shù) 函數(shù) 參數(shù)聲明: 向量 a ,向量 b ,維數(shù) n 意義: 求向量 a 和向量 b 的點(diǎn)積,將結(jié)果存儲(chǔ)到 c 中作為

    2024年02月13日
    瀏覽(63)
  • Matlab 實(shí)現(xiàn)圖像的直角坐標(biāo)系和極坐標(biāo)系的相互轉(zhuǎn)化

    Matlab 實(shí)現(xiàn)圖像的直角坐標(biāo)系和極坐標(biāo)系的相互轉(zhuǎn)化

    某日需要在matlab進(jìn)行圖像的的極直互化,發(fā)現(xiàn)并沒(méi)有介紹相應(yīng)內(nèi)容的文章,所以有了自己調(diào)研一下并寫(xiě)一寫(xiě)的想法。果然只要想就能做到,所以有了下面這篇文章。 根據(jù)直角坐標(biāo)系(笛卡爾系)內(nèi)數(shù)值和極坐標(biāo)系關(guān)系 根據(jù)上述公式不難想出,在直角坐標(biāo)系中的圓會(huì)在極坐標(biāo)

    2024年02月11日
    瀏覽(21)
  • 坐標(biāo)轉(zhuǎn)換(相機(jī)坐標(biāo)系、世界坐標(biāo)系、圖像物理坐標(biāo)系、圖像像素坐標(biāo)系)

    坐標(biāo)轉(zhuǎn)換(相機(jī)坐標(biāo)系、世界坐標(biāo)系、圖像物理坐標(biāo)系、圖像像素坐標(biāo)系)

    一般情況下我們所涉及到的坐標(biāo)包括四個(gè),即相機(jī)坐標(biāo)系、世界坐標(biāo)系、圖像物理坐標(biāo)系、圖像像素坐標(biāo)系。我們本文的講解思路是在講解每個(gè)坐標(biāo)轉(zhuǎn)換之前先講清楚每個(gè)坐標(biāo)系所表示的含義。本文主要參考由高翔主編的視覺(jué)SLAM十四講第五章相機(jī)模型。 相機(jī)將三維世界的坐

    2024年02月09日
    瀏覽(23)
  • 世界坐標(biāo)系、相機(jī)坐標(biāo)系和圖像坐標(biāo)系的轉(zhuǎn)換

    世界坐標(biāo)系、相機(jī)坐標(biāo)系和圖像坐標(biāo)系的轉(zhuǎn)換

    之前只是停留在會(huì)用的階段,一直沒(méi)去讀懂計(jì)算的原理,今天通讀了大佬的文章,寫(xiě)的言簡(jiǎn)意賅,感謝感謝~~特此記錄一下,僅用作個(gè)人筆記 貼鏈接,十分感謝~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 將三維物體轉(zhuǎn)換成照

    2023年04月15日
    瀏覽(35)
  • 相機(jī)坐標(biāo)系、像素坐標(biāo)系轉(zhuǎn)換

    相機(jī)內(nèi)參矩陣是相機(jī)的重要參數(shù)之一,它描述了相機(jī)光學(xué)系統(tǒng)的內(nèi)部性質(zhì),例如焦距、光學(xué)中心和圖像畸變等信息。在計(jì)算機(jī)視覺(jué)和圖形學(xué)中,相機(jī)內(nèi)參矩陣通常用于將圖像坐標(biāo)系中的像素坐標(biāo)轉(zhuǎn)換為相機(jī)坐標(biāo)系中的三維坐標(biāo),或者將相機(jī)坐標(biāo)系中的三維坐標(biāo)投影到圖像坐標(biāo)

    2024年02月13日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包