小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
在3d世界中投影也是很重要的一部分,openGL ES支援兩種投影方式,正交投影和透視投影。
1.正交投影
正交投影中觀察者的視線是平行的,不產生進大選小的效果,設定正交投影的語句為
gl.glOrthof(-ratio, ratio, -1, 1, 1, 10);
第一個和第二個參數為視口左右側對應的x座標,第三個和第四個參數為視口上下側對應的y座標,第五個和第六個座標為最近端和最遠端的z座標
OpenGL不支援無限遠的可視地區,視口就是螢幕上指定的矩形地區
設定的方法就是在GLSurfaceView.Renderer類中的onDrawFrame方法中設定這句即可
2.透視投影
透視投影和正交投影不同,如同現實中觀測到的世界一樣,會產生近大遠小的效果,設定的方法和正交投影一樣,也是在GLSurfaceView.Renderer類中的onDrawFrame方法中設定
設定正交的語句為
gl.glFrustumf(-ratio, ratio, -1, 1, 1f, 10);
第一個和第二個參數為視口左右側對應的x座標,第三個和第四個參數為視口上下側對應的y座標,第五個和第六個座標為最近端和最遠端的z座標
在left,right,top,bottom值不變的情況下,near值越小,視角越大,在開發中對這六個參數的調整非常重要
3.設定視口
在GLSurfaceView.Renderer的onSurfaceChanged方法中調用如下的方法即可
gl.glViewport(0, 0, width, height);
前兩個參數為視口矩形在螢幕左上側點的座標,後兩個參數是寬度和高度
4.近大遠小原理
正交投影的視景體就相當於長方體,沒有近大遠小的效果,所有物體都保留原有的大小和角度,而透視投影則是距離攝像機越遠物體在映像中看上去就越小,離攝像機越近,則看上去越大。
參考自Android 3d 遊戲開發技術詳解與典型案例,如有錯誤之處,希望大家多多指正
下一篇寫一下光照