矩陣變換與座標系
阿新 • • 發佈:2018-12-28
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),證明矩陣變換無誤。