OpenGL ES 2 0座標系設定與頂點轉換

2021-09-02 01:15:41 字數 3547 閱讀 6139

前面我們對使用android opengl es 2.0繪圖做過綜述。對於剛剛接觸到opengl的人來說,紋理和貼圖往往令其感動很頭疼。在解開這些謎團之前,我們先來了解一下繪製圖形的基礎--座標系。 

在使用opengl的場景中,存在世界座標、區域性座標、紋理座標和螢幕座標幾種。 

分為3個軸,x,y,z 中心點為o, 箭頭方向為正方向,最大與最小值為1和-1,這是經過歸一化處理的。這樣的設計是為了便於顯示卡計算。 

應用在裝置螢幕上的座標系。也就是圖形最終繪製的地方。左上角為原點,箭頭為正方向,大小又螢幕畫素大小決定。opengl的螢幕座標系,y軸向上為正。相當於上面那個三維座標系擷取乙個二維的xy。 

也做了歸一化處理。這個座標就代表了乙個紋理。opengl是基於定點的網格繪製。就是說,opengl的圖形都是由很多頂點,按照一定的規則鏈結起來構成的圖形。那麼紋理座標的4個座標點,對映到頂點上。opengl就會把這個紋理應用到4個定點構成的圖形上。 

將opengl座標系的中心點與螢幕座標系的中心點重合。矩形為螢幕的區域。opengl的繪製方法會把這個座標系的頂點,組合成圖形呈現在螢幕上(所以可以認為頂點座標(x, y)就是螢幕座標歸一化的結果,當然,這個螢幕座標可能只是物理顯示器的其中一塊顯示區域)。當然這裡還涉及到攝像機的位置,螢幕剪裁等設定。暫時不考慮。 

那麼什麼是頂點呢?就是乙個有xyz座標的點。如(0,0,0)或(1,1,1)。xy就和通常的二維座標一樣定位平面的位置。z軸表示的是深度,opengl就是為了繪製3d圖形而誕生的。頂點座標是做了歸一化處理的float型別。那麼這裡就會涉及到螢幕座標系到opengl座標系的轉化工作。 

螢幕座標系,左上點為(0,0) 那麼螢幕中心點座標,就是(sreenwidth / 2, screenheight / 2)。而對應opengl座標系的歸一化座標就是(0,0,0)。所以這裡需要把螢幕座標轉換成opengl的歸一化座標。 

/*** convert x to opengl** @param x* screen x offset top left

* @return screen x offset top left in opengl

*/

public static float toglx(float x)

/**

* convert y to opengl y

*

* @param y

* screen y offset top left

* @return screen y offset top left in opengl

*/

public static float togly(float y)

/**

* convert width to opengl width

*

* @param width

* @return width in opengl

*/

public static float toglwidth(float width)

/**

* convert height to opengl height

*

* @param height

* @return height in opengl

*/

public static float toglheight(float height)

/**

* convert x to screen x

*

* @param glx

* opengl x

* @return screen x

*/

public static float toscreenx(float glx)

/**

* convert y to screent y

*

* @param gly

* opengl y

* @return screen y

*/

public static float toscreeny(float gly)

/**

* convert glwidth to screen width

*

* @param glwidth

* @return width in screen

*/

public static float toscreenwidth(float glwidth)

/**

* convert height to screen height

*

* @param glheight

* @return height in screen

*/

public static float toscreenheight(float glheight)

「北京54 座標系」轉「西安80座標系」

北京54 座標系 轉 西安80座標系 詳細教程 北京54座標系和西安80座標系其實是一種橢球引數的轉換,作為這種轉換在同乙個橢球裡的轉換都是嚴密的,而在不同的橢球之間的轉換是不嚴密,因此不存在一套轉換引數可以全國通用的,在每個地方會不一樣,因為他們是兩個不同的橢球基準。那麼,兩個橢球間的座標轉換,一...

WGS 84座標系轉GCJ02座標系

最近用到某個定位介面,返回的是wsg 84座標系下的經緯度資訊,但專案前端使用的是高德地圖,發現位置有偏移。需要進行座標轉換才能正常顯示。各地圖api座標系統比較 wgs84座標系 即地球座標系,國際上通用的座標系。裝置一般包含gps晶元或者北斗晶元獲取的經緯度為wgs84地理座標系。谷歌地圖採用的...

5 1 5 座標系關係檢視

在機械人系統中,涉及的座標系有多個,為了方便檢視,ros 提供了專門的工具,可以用於生成顯示座標系關係的 pdf 檔案,該檔案包含樹形結構的座標系圖譜。6.1準備 首先呼叫rospack find tf2 tools檢視是否包含該功能包,如果沒有,請使用如下命令安裝 sudo apt install...