Android使用OpenGL ES2.0繪制3D圖像或者加載3D模型時懂拾,為了達到立體效果往往需要設置視見轉(zhuǎn)換矩陣和投影轉(zhuǎn)換矩陣即Matrix.setLookAtM(mVMatrix, 0, cx, cy, cz, tx, ty, tz, upx, upy, upz) 和 Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, near, far)倦青。學習這兩個方法需要先了解openGL的3D坐標系纱扭,可以自行百度澄惊。
Matrix.setLookAtM
需要填充的參數(shù)
float cx, //攝像機位置x
float cy, //攝像機位置y
float cz, //攝像機位置z
float tx, //攝像機目標點x
float ty, //攝像機目標點y
float tz, //攝像機目標點z
float upx, //攝像機UP向量X分量
float upy, //攝像機UP向量Y分量
float upz //攝像機UP向量Z分量
這個方法看起來很抽象撒穷,設幾組參數(shù)對比一下效果捕儒,攝像機目標點隐圾,即繪制的3D圖像,tx碗脊,ty, tz,為圖像的中心位置設置到原點即 tx = 0,ty = 0, tz = 0; 攝像機的位置啼肩,即觀察者眼睛的位置 我們設置在目標點的正前方(位置z軸正方向),cx = 0, cy = 0, cz = 10; 接著是攝像機頂部的方向了衙伶,如下圖祈坠,很顯然相機旋轉(zhuǎn),up的方向就會改變矢劲,這樣就會會影響到繪制圖像的角度赦拘。
Matrix.frustumM
需要填充的參數(shù)有
float left, //near面的left
float right, //near面的right
float bottom, //near面的bottom
float top, //near面的top
float near, //near面距離
float far //far面距離
設置這些參數(shù)能起到的作用:先是left,right和bottom,top憔维,這4個參數(shù)會影響圖像左右和上下縮放比涛救,所以往往會設置的值分別-(float) width / height和(float) width / height,top和bottom和top會影響上下縮放比业扒,如果left和right已經(jīng)設置好縮放检吆,則bottom只需要設置為-1,top設置為1程储,這樣就能保持圖像不變形蹭沛。也可以將left,right 與bottom章鲤,top交換比例致板,即bottom和top設置為 -height/width 和 height/width, left和right設置為-1和1。
near和far參數(shù)稍抽象一點咏窿,就是一個立方體的前面和后面斟或,near和far需要結(jié)合拍攝相機即觀察者眼睛的位置來設置,例如setLookAtM中設置cx = 0, cy = 0, cz = 10集嵌,near設置的范圍需要是小于10才可以看得到繪制的圖像萝挤,如果大于10,圖像就會處于了觀察這眼睛的后面根欧,這樣繪制的圖像就會消失在鏡頭前怜珍,far參數(shù),far參數(shù)影響的是立體圖形的背面凤粗,far一定比near大酥泛,一般會設置得比較大,如果設置的比較小,一旦3D圖形尺寸很大柔袁,這時候由于far太小呆躲,這個投影矩陣沒法容納圖形全部的背面,這樣3D圖形的背面會有部分隱藏掉的捶索。