Android OpenGL ES 投影矩阵的设置

* 注 : 参考 :http://wiki.jikexueyuan.com/project/opengl-es-guide/projection.html
在之前的文章中,已介绍OpenGL的基本使用,本文开始,将进一步了解OpenGL

OpenGL投影矩阵

在之前的示例中,OpenGL初始化代码中有以下代码:

        // Select the projection matrix
        gl.glMatrixMode(GL10.GL_PROJECTION);
        // Reset the projection matrix
        gl.glLoadIdentity();

该代码为设置当前 Matrix 模式为 Projection 投影矩阵
OpenGL ES 可以使用两种不同的投影变换:透视投影(Perspective Projection)和正侧投影(Orthographic Projection)。

透视投影(Perspective Projection)

透视投影的特点是“近大远小”,也就是我们眼睛日常看到的世界。OpenGL ES 定义透视投影的函数为 glFrustum():

public static void gluPerspective(GL10 gl, float fovy, float aspect, float zNear, float zFar)

视锥由(left,bottom,-near) 和(right,top,-near) 定义了靠近观测点的裁剪面,near 和far定义了观测点和两个创建面直接的近距离和远距离。
在实际写代码时,Android OpenGL ES提供了一个辅助方法gluPerspective()可以更简单的来定义一个透视投影变换:

public static void gluPerspective(GL10 gl, float fovy, float aspect, float zNear, float zFar)
  • fovy: 定义视锥的 view angle.
  • aspect: 定义视锥的宽高比。
  • zNear: 定义裁剪面的近距离。
  • zFar: 定义创建面的远距离。
    注:所绘画内容,需在View volume中才可显示,利用Z轴平移,将内容移到View volume区中,如:
 gl.glTranslatef( 0f,0f ,zNear);

正侧投影(Orthographic Projection)

正侧投影,它的视锥为一长方体,特点是物体的大小不随到观测点的距离而变化,投影后可以保持物体之间的距离和夹角。它主要用在工程制图上。

定义正侧投影(也称作平移投影)的函数为:

public void glOrthof(float left, float right,float bottom,float top,float near,float far)

裁剪

场景中的图形的顶点经过 modelview 和 projection 坐标变换后,所有处在 Viewing volumn之外的顶点都会被裁剪掉,透视投影和正侧投影都有6个裁剪面。所有处在裁剪面外部的顶点都需剪裁掉以提高绘图性能。

注: 在前面例子中,没有设置透视投影或正侧投影,其默认为正侧投影,并使之满屏,宽高各为1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值