博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL ES的函数解析和记录理解
阅读量:6572 次
发布时间:2019-06-24

本文共 1845 字,大约阅读时间需要 6 分钟。

昨天看了相关的视频,所以把openGL ES中需要用到的几个函数,随手记录一下。

1、glViewport(int x,int y,int  width,int height)   ————从设备坐标转到视窗坐标

X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。
width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

       glViewport在默认情况下,视口(也就是手机的像素大小对应的矩形区域)被设置为占据打开窗口的整个像素矩形,也就是全屏显示,手机窗口大小和它是大小相同的,我们可以设置width和height来得到我们想要的大小和比例。比如我有台1080*1920的手机,但是我只想绘制一个以左下角为原点,大小为320*480的绘图区域,那么我就可以设置成这样:glViewPort(0,0, 320, 480)。

2.glLoadIdentify 重置当前指定的矩阵为单位矩阵

2.glMatrixMode(GL_PROJECTION)  ——————从眼睛坐标到剪辑坐标,使用透视(3D)效果

   为了从眼睛坐标到剪辑坐标,需要设置成投影矩阵模式,同样的有下面两种矩阵模式我们可以根据需要来设置。

   GL_MODELVIEW —————— 模型视景矩阵

   GL_TEXTTURE  ——————  纹理矩阵

GL是一个状态机,只装载什么都不做的身份矩阵,通过函数3我们能修改身份矩阵为一个正交正投影。

3.glOrthof(0, float backingWidth, 0, float backingHeight, float zNear, float zFar) ———— 做2D效果从左底部角落到屏幕的大小,所以是(0,0)到(backingWidth, backingHeight),然后剪辑切面的最近和最远的距离,也就是zNear和zFar。

例如glOrthof (-1, 2,  -2,  2, -1 , 1) 就会得到一个以屏幕中心为原点,宽高都等于屏幕二分之一的矩形区域。

4.glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar)————设置你想要的截锥体的类型,该方法中的参数分别对应摄像头可视截锥体的左边,右边,底部,顶部的位置,以及眼睛离这个截锥体的最近距离和最远距离。

   要注意的是,这可能会出现灰白的情况,因为我们的平面是在z轴为0的时候显示的,当zNear和zFar的区间不包含0时,比如设置了最近距离是5,最远距离是10,就会出现不显示的情况,所以可以通过glTranslate函数去把这个单元正方形移回来,让它处于可视截锥体的范围内,详见函数5.

5.glTranslatef(float x, float y, float z) ———— 很明显这是让物体在xyz轴上进行平移,比如我们可以设置成glTranslate(0, 0, -7),也就是让它沿着z轴反方向平移7个单位,也就是离我们的眼睛往后7个单位,这样就可以处在我们的视觉当中了。另外还有一点就是这个透视是和正向正投射相悖的,我们可以通过旋转一个角度来证实这一点,详见函数6。

6.glRotatef(float angel, float x, float y, float z) ———— angel对应着要旋转的角度,xyz决定旋转的轴,比如当我们设置成(30,0, -1, 0),也就是让它以Y轴为旋转轴,旋转30度。和对正向正投影做这个操作不一样的是,正向正投影的只是直接在屏幕框架上投射,不会让离我们更远的物体变小,离我们更近的物体变大,所以看起来也就不够真实,下图中的依次是透视投影和正交正投影,可以看出他们的差异

7.glScalef(float x, float y, float z)  —————同样地,这表示让我们的物体在xyz轴上进行缩放,比如我们设置成glScale(2, 2, 2),那么物体就会变成原来的两倍大。

8.glPushMatrix() —————  保存当前矩阵

   glPostMatrix() —————  弹出栈顶的矩阵,并将其删除

要注意的是,操作顺序很重要,也就是glTranslatef、glRotatef、glScalef的顺序很重要,决定了物体绕哪个点进行旋转。

你可能感兴趣的文章
物联网还是泄秘网?嗅探流量即可知用户动向
查看>>
顺势而为,戴尔加速流动文件系统进化
查看>>
关于视频监控线缆的常识
查看>>
美国科技投资交易约4.1%来自中国 投资仍然很困难
查看>>
维基解密:科技公司获得安全漏洞信息须答应几个条件
查看>>
两化融合:唐山探路重工业城市智慧转型
查看>>
大数据将植物学研究带入新境界
查看>>
网络分解的时代即将到来,云服务商正在铺路 | 分析师洞察
查看>>
探索测试探索思路
查看>>
Mysql数据库远程授权
查看>>
测试设备商泰瑞达Q3净利6379万 同比减10.72%
查看>>
如何在Ubuntu 13.04, 13.10上安装Sublime Text 3
查看>>
C++语言基础 例程 派生类的声明与构成
查看>>
时间都去哪了?BPC电波授时信号的“零成本”伪造
查看>>
大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《社交数据分析:好友推荐》篇...
查看>>
Python的类方法
查看>>
吐槽一下J2Cache
查看>>
PHP的语言构造器
查看>>
mysql5.6.25及以上下载衔接
查看>>
Node+fs+定时器(node-schedule)+MySql
查看>>