我在上篇部落格寫出了如何用**建立乙個我們可以任意控制頂點得圓柱體。本片部落格著重記錄如何在空間建立類似unity可以控制物體的座標軸。由於我們要控制圓柱體的長度,所以我們設計的座標軸是兩個方塊在圓柱體的兩端。效果圖如下:
首先我們要繪製兩個方塊,我們知道空間顯示在我們眼前的物體都是通過由多個三角面組成的mesh顯示在我們面前的。所以我們首先建立乙個屬於我們的boxmesh。**如下:
public static mesh createboxmesh(float width, float height, float depth)
;// create the mesh and return it to the client code
var boxmesh = new mesh();
boxmesh.vertices = boxvertexpositions;
boxmesh.normals = boxvertexnormals;
boxmesh.setindices(vertexindices, meshtopology.********s, 0);
return boxmesh;
}
建立後的靜態函式供我們需要繪製的時候呼叫。下面我們要設定boxmesh 的位置,尤拉角以及縮放比。unity中繪製mesh或者gl線段一般都在onrenderobject函式中進行。
protected void onrenderobject()
首先我們要設定boxmesh的transform資訊給儲存到4*4矩陣中,
private matrix4x4 getlengthworldtransform()
return worldtransforms;
}
首先來獲取boxmesh的位置。我們知道這個自製的座標軸要在圓柱的兩端。而且在上篇部落格我們看到我們的圓柱體的左右兩側就是圓柱的forward和-forward,所以獲取區域性座標**如下(lastselectedgameobject就是我們的圓柱體,templeftgizmopos就是我們在上節所說的leftpos,我們可以在座標軸顯示的初始化函式中獲取圓柱體的長度length,即templeftgizmopos=leftpos=length/2。gizmoscale就是我們根據攝像機和boxmesh的距離來自動調節boxmesh大小的比例係數):
private vector3 getboxesgizmolocalpositions(float gizmoscale);}
calculategizmoscale函式**如下:
float _gizmobasescale =0.77f;
protected float calculategizmoscale()
else
}
private quaternion getboxesgizmolocalrotations();}
以上方法我們就可以獲取到座標軸的transform資訊。接下來就將boxmesh的資訊給賦值上。
private void drawcontrollinelengthaxis(matrix4x4 worldtransforms)
}
以上就是對自己設計的座標軸chua建立,當然我們可以仿照unity的xyz建立屬於我們的平移座標軸。原理類似。 Unity3D 座標學習
1 常用的必然事件 在 unity 的指令碼中,可以定義一些特定的函式,這些函式會在滿足某些條件時由 unity 自動呼叫,它們被稱為必然事件 certain events 而start 和update 正是最常用的兩個事件,因此 unity 預設為新建的指令碼新增了這兩個事件。a awake 喚醒...
Unity3D 參考座標系
參考座標系 reference coordinate system 列表是讓你指定用於變換 移動move 旋轉rotate和縮放scale 的座標系。選項包括檢視座標view,螢幕座標screen,世界座標world,父座標parent,區域性座標local,網格座標grid和拾取座標pick。在螢...
unity3d 參考座標系
參考座標系 reference coordinate system 列表是讓你指定用於變換 移動move 旋轉rotate和縮放scale 的座標系。選項包括檢視座標view,螢幕座標screen,世界座標world,父座標parent,區域性座標local,網格座標grid和拾取座標pick。在螢...