矩陣變換與坐標系


1.新建一個空物體,命名為parent設置坐標為(3, 0, 0)

2.在parent下新建一個cube,設置坐標為(3, 0, 0)

給cube添加一個Test腳本,在Start方法里添加如下代碼

1 print("transform.position" + transform.position);
2 print("transform.localPosition"+transform.localPosition);

運行輸出結果為:

transform.position(6.0,0.0,0.0)

transform.localPosition(3.0,0.0,0.0)

我的理解:transform.localPosition值局部坐標,相對父親的原點來設置的,無論父坐標怎么改變,localPosition的坐標是不會改變的。好比你坐在一輛行駛的汽車里,無論車開到哪里,你還是坐在你的座位上,你相對汽車的位置是不變的。

transform.position指的是世界坐標,根據世界的原點來設置的。這時候如果父坐標發生改變,那么子物體的世界坐標也會隨着改變。好比你坐在一輛行駛的汽車里,汽車位置改變了,你用經緯度描述的位置也會發生改變。這里經緯度就好比世界坐標。

 

矩陣變換:

1.物體坐標轉換到世界坐標M矩陣

 Vector3 posWorld = transform.parent.localToWorldMatrix.MultiplyPoint(transform.localPosition); 

 

print("posWorld"+posWorld);

輸出為psWorld(6.0,0.0,0.0)

2.世界坐標轉換到相機坐標V矩陣

 

1 Vector3 viewportPos = cameraGameObj.transform.worldToLocalMatrix.MultiplyPoint(transform.position);
2         print("viewportPos"+viewportPos);

 

輸出為viewportPos(6.0, -1.0, 10.0)    cameraGameObj指的是MainCamera,坐標為(0, 1, -10)

把Cube拖放到MainCamear下,cube的transform組件中的position顯示為(6.0, -1.0, 10.0),證明矩陣變換無誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM