OpenGL ES开发基础(投影与变换)

3D应用开发中,一项很重要的工作 就是对场景中的物体进行各种投影与变换。
在OpenGL ES2.0之后变换方面采取开放模式,API不会提供完成各种变换的方法,变换矩阵都是由开发人员直接提供给渲染管线。所以今天给大家推荐本书3D数学基础,建议大家都去学一下!
3D数学下载传送门:点击下载

今天我们讲投影与变换,在讲之前我们先研究下,使用相机是拍照决定图片效果的的因素有哪些!
在这里插入图片描述
上图我们可以看到由于上图相机的 位置 、方向、距离 不同拍出来的效果也是不一样的!所以决定照片效果的 就是 距离、方向 和 相机位置,带着这三个答案我们来学习投影!

一、投影
在OpenGLES中投影分正交投影和透视投影,这里我们先来看透视投影吧!

  1. 正交投影

在这里插入图片描述
视点:对应相机位置
近平面:可以理解为 相机拍摄清楚的最近距离
远平面:可以理解为 相机能拍摄清楚的最远距离
视景体:我们要拍摄的空间

场景中 处于视景体内的物体会被投影到近平面上(超出视景体会被剪切掉),垂直方向向量的平面为近平面,距离视点远的叫远平面。
远平面和近平面组成的长方体叫做视景体

视景体中心轴线与四个平面(除去远近的上下左右四个面)的距离分别为top、bottom、left、right。
总结:
正交投影是平行投影的一种,特点是投影线是平行的,视景体是长方体;投影到近平面上的图形不会产生真实世界中近大远小的效果。

Matrix.orthoM(float[] m, //存储生成矩阵元素的数组
        int mOffset,//填充起始偏移量
        float left, //near面的left
        float right, //near面的right
        float bottom, //near面的bottom
        float top,//near面的top
        float near, //near面与视点的距离
        float far)  //far面与视点的距离
		
	orthoM的功能是根据六个正交投影相关参数产生正交投影,并将矩阵元素添加到指定的数组中。
	参数 left  right 为近平面上下侧边  对应的X坐标
	参数 bottm、top为近平面上下侧边    对应的Y坐标
	这四个参数分别来确定 左右上下 平面的位置
	参数near 、far分别为视景体近平面与远平面到视点的距离。

在这里插入图片描述
场景中的物体投影到近平面后,最终会映射到显示屏上的视口。
名词解释:视口就是显示屏上指定的区域。
设置视口可以用 GLES20.glViewport(x,y,with,height)
参数解释:xy为视口矩形左上侧点在屏幕坐标,
width ,height,为视口的宽高。

注意:
从近平面倒是口的映射是有渲染管线自动完成的,
一般情况下,我们需要满足近平面的宽高与视口的宽高比相同
也就是{   (left+right)/(top+bottom)==width/height   不满足图像就会拉伸    }
  1. 透视投影
    我们用眼睛观察物体时会有近大远小的效果,那我们的透视投影就是来实现这种效果的。大部分3D游戏采用的都是透视投影。
    在这里插入图片描述
    在这里插入图片描述
Matrix.frustumM(float[] m, //存储生成矩阵元素的数组
        int mOffset,//填充起始偏移量
        float left, //near面的left
        float right, //near面的right
        float bottom, //near面的bottom
        float top,//near面的top
        float near, //near面与视点的距离
        float far)  //far面与视点的距离

二、变换
3D里面最典型的案例就是坐标变换,像我们的平移,旋转,缩放,其实就是在做坐标变换。
那这里我们举个典型 :在二维平面上旋转 ( 三维旋转的复杂点但都差不多! )(个人讲课笔记不喜勿喷)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值