`
isiqi
  • 浏览: 16000224 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android 3D 游戏学习笔记(3)-投影

 
阅读更多

小满(billman)个人原创,欢迎转载,转载请注明地址,小满(billman)的专栏地址http://blog.csdn.net/bill_man

3d世界中投影也是很重要的一部分,openGLES支持两种投影方式,正交投影和透视投影。

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坐标

leftrighttopbottom值不变的情况下,near值越小,视角越大,在开发中对这六个参数的调整非常重要

3.设置视口

GLSurfaceView.RendereronSurfaceChanged方法中调用如下的方法即可

gl.glViewport(0,0,width,height);

前两个参数为视口矩形在屏幕左上侧点的坐标,后两个参数是宽度和高度

4.近大远小原理

正交投影的视景体就相当于长方体,没有近大远小的效果,所有物体都保留原有的大小和角度,而透视投影则是距离摄像机越远物体在图像中看上去就越小,离摄像机越近,则看上去越大。

参考自Android3d游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正

下一篇写一下光照

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics