小满(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 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正
下一篇写一下光照