1. 程式人生 > >矩陣變換與座標系

矩陣變換與座標系

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),證明矩陣變換無誤。