Android 3D 遊戲學習筆記(3)-投影

來源:互聯網
上載者:User

小滿(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 遊戲開發技術詳解與典型案例,如有錯誤之處,希望大家多多指正

下一篇寫一下光照

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.