Android openGL ES2.0 Matrix.frustumM和Matrix.setLookAtM解析

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的方向就會改變矢劲,這樣就會會影響到繪制圖像的角度赦拘。

拍攝的相機位置,即觀察者的眼睛
例如設置up方向為y軸正方向芬沉,upx = 0,upy = 1,upz = 0躺同。這是相機正對著目標圖像,則繪制出來的效果如下圖所示
如果設置up方向為x軸正方向丸逸,upx = 1,upy = 0,upz = 0蹋艺,繪制的圖像就會如下圖所示
顯然如果設置在z軸方向,圖像就會看不見黄刚。Matrix.setLookAtM,的作用大體就是這樣捎谨。

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圖形的背面會有部分隱藏掉的捶索。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末插掂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腥例,更是在濱河造成了極大的恐慌辅甥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燎竖,死亡現(xiàn)場離奇詭異璃弄,居然都是意外死亡,警方通過查閱死者的電腦和手機构回,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門谢揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捐凭,你說我怎么就攤上這事拨扶。” “怎么了茁肠?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵患民,是天一觀的道長。 經(jīng)常有香客問我垦梆,道長匹颤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任托猩,我火速辦了婚禮印蓖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘京腥。我一直安慰自己赦肃,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布公浪。 她就那樣靜靜地躺著他宛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪欠气。 梳的紋絲不亂的頭發(fā)上厅各,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音预柒,去河邊找鬼队塘。 笑死袁梗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的憔古。 我是一名探鬼主播遮怜,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼投放!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起适贸,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灸芳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拜姿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烙样,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年蕊肥,在試婚紗的時候發(fā)現(xiàn)自己被綠了谒获。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壁却,死狀恐怖批狱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情展东,我是刑警寧澤赔硫,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盐肃,受9級特大地震影響爪膊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砸王,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一推盛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谦铃,春花似錦耘成、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疮方,卻和暖如春控嗜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骡显。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工疆栏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曾掂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓壁顶,卻偏偏與公主長得像珠洗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子若专,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容