博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android OpenGL ES 开发教程(17):投影变换Projection
阅读量:7228 次
发布时间:2019-06-29

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

前面ModelView变换相当于拍照时放置相机和调整被拍物体的位置和角度。投影变换则对应于调整相机镜头远近来取景。

下面代码设置当前Matrix模式为Projection投影矩阵:

gl.glMatrixMode(GL_PROJECTION); gl.glLoadIdentity();

 

后续的坐标变换则针对投影矩阵。投影变换的目的是定义视锥(viewing volume),视锥一方面定义了物体如何投影到屏幕(如透视投影或是正侧投影),另一方面视锥也定义了裁剪场景的区域大小。

OpenGL ES可以使用两种不同的投影变换:透视投影(Perspective Projection)和正侧投影(Orthographic Projection)。

透视投影(Perspective Projection)

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

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

视锥由(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: 定义创建面的远距离。

正侧投影(Orthographic Projection)

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

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

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

裁剪

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

 

转载地址:http://rodfm.baihongyu.com/

你可能感兴趣的文章
iOS 头部视图下拉变大
查看>>
Disruptor并发框架
查看>>
react-hooks 实现简单的评论list
查看>>
【多图警告】学会JavaScript测试你就是同行中最亮的仔(妹)
查看>>
19-04-25
查看>>
一个JAVA程序员成长之路分享
查看>>
30K iOS程序员的简述:如何快速进阶成为高级开发人员
查看>>
Go 夜读 - 每周四晚上 Go 源码阅读技术分享
查看>>
tranform知多少
查看>>
Android电量优化
查看>>
[爬虫手记] 我是如何在3分钟内开发完一个爬虫的
查看>>
【译】Css Grid VS Flexbox: 实践比较
查看>>
iOS 开发知识索引
查看>>
Linux iptables命令
查看>>
webpack的使用
查看>>
干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
查看>>
D3.js入门
查看>>
一次和前端的相互甩锅的问题记录
查看>>
纯OC实现iOS DLNA投屏功能了解一下
查看>>
RxJava -- fromArray 和 Just 以及 interval
查看>>