5.1 屏幕比例问题(We Have an Aspect Ratio Problem)

现在我们知道在OpenGL里面所有渲染的东西在x轴及y轴上都限制在[-1,+1]范围内,z轴上也存在同样的限制。在这个范围内的坐标有一个特殊的称呼:规范化坐标空间,同时独立于屏幕的大小和形状。不幸的是因为独立于实际屏幕尺寸,假如我们直接使用这些坐标那将会产生一些问题,比如横屏模式下的挤压问题。
    假如有一个屏幕尺寸为1280 x 720,在Android上这是一个通用的屏幕分辨率。同时为了简单起见,假设使用整个屏幕进行显示。如果我们的设备是竖屏模式,[-1, +1]将会映射到屏幕的1280像素高度,但是宽度只有720像素。这样的话图像在显示的时候就会产生挤压问题。
    规范化设备坐标假定坐标空间是正方形的,下如下图所示:

然而,由于实际的视口(viewport)可能并不是正方形的,这时图片会在一个方向拉伸而在另一个方向产生挤压。当一张图片显示在竖屏模式下的规范化设备空间时将会在水平方向上产生挤压,如下图所示:

同样的,当在横屏模式下时,将会在垂直方向上产生挤压,如下图所示:

5.1.1 调整屏幕比例(Adjusting to the Aspect Ratio)

我们需要考虑屏幕形状以调整坐标空间,一种方法是把尺寸较小的一边规范化到[-1, +1],同时根据屏幕尺寸调整较大边的比例。
    举个例子:比如在竖屏模式下,宽度是720,高度是1280,我们仍然把宽度映射到[-1, 1],高度规范化到[-1280/720,
1280/720] or [-1.78, 1.78]。当在横屏模式下时,把宽度映射到[-1.78, 1.78],高度映射到[-1, 1]。
    通过改变坐标空间,我们可以改变已有的OpenGL绘制范围,这样的话图像在竖屏和横屏模式下都会保持同样的显示效果,如下图所示:

下一节我们将学习虚拟坐标空间。

Part I 空气曲棍球 Chapter5 (5.1 We Have an Aspect Ratio Problem)相关推荐

  1. Part I 空气曲棍球 Chapter5 (5.3 Linear Algebra 101)

    5.3 线性代数基础(Linear Algebra 101) 在OpenGL中向量和矩阵用的非常多,其中一个非常重要的应用就是设置正交投影和透视投影.使用矩阵进行投影你只需要做一些矩阵的加法与乘法,而 ...

  2. Part I 空气曲棍球 Chapter5(5.5 Adding an Orthographic Projection)

    5.5 增加正侧投影(Adding an Orthographic Projection) 现在我们可以在项目中添加正交投影并且修复桌面压缩的问题了. 5.5.1 更新着色器(Updating the ...

  3. Part I 空气曲棍球 Chapter5(5.4 Defining an Orthographic Projection)

    5.4 定义正侧投影(Defining an Orthographic Projection) 我们使用包android.opengl 下面的Matrix类定义一个正侧投影,在Matrix中有一个方法 ...

  4. 空气曲棍球 由哪几部分组成_Excel中的曲棍球运动员数据分析

    空气曲棍球 由哪几部分组成 Congratulations to the USA Women's Hockey team, who won the Olympic gold medal. They b ...

  5. 《OpenGL ES应用开发实践指南:Android卷》—— 2.1 为什么选择空气曲棍球

    本节书摘来自华章出版社<OpenGL ES应用开发实践指南:Android卷>一 书中的第2章,第2.1节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区&qu ...

  6. Part I 空气曲棍球 Chapter8(Building Simple Objects)

    我们的空气曲棍球项目已经捣鼓好久了,现在绘制出来的桌面也是呈现出了一个好视角并且配合纹理映射后看起来更好了:然而由于球棍只是一个点所以看起来并不像真正的球棍,你能想象下使用像一个点一样的球棍打球会是什 ...

  7. 《OpenGL ES应用开发实践指南:Android卷》—— 2.3 定义空气曲棍球桌子的结构...

    本节书摘来自华章出版社<OpenGL ES应用开发实践指南:Android卷>一 书中的第2章,第2.3节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区&qu ...

  8. Part I 空气曲棍球 Chapter9(Adding Touch Feedback)

    通过支持触控反馈获得好的用户交互体验是很多应用和游戏的基石,这样会让用户觉得他们能真正使用一些真实的东西,即使用户只是对着空白的屏幕也是如此.一些手机游戏之所以非常流行只是因为增加了一些触控而已:此时 ...

  9. Part I A Simple game of air hockey(空气曲棍球)-Chapter2 Defining Vertices and Shaders

    上一章节简单介绍了OpenGL ES 2.0开发的简单入门知识,实际上你学没有真正进入OpenGL ES 2.0的世界,从这一章开始将会一步步的带着你开始你的OpenGL ES 2.0实战之旅,这里最 ...

最新文章

  1. java 模拟时钟_java模拟时钟
  2. 同步等待异步操作,为什么Wait()在这里冻结程序
  3. sping中注解事务的应用
  4. Spring MVC 基础注解之@RequestMapping、@Controller、(二)
  5. (Mybatis)XML配置解析
  6. ALV Checkbox 单行灰显
  7. linux下面把png文件转化为背景透明
  8. 领导者的资质——学习笔记(1)
  9. 苹果网页归档转html,常用JS转换HTML转义符
  10. Java注解学习一:注解术语
  11. mac苹果ping不通网络
  12. tshark查看、指定网卡
  13. windows制作docker镜像_.NET Core程序跑在任何有docker的地方
  14. android listview局部刷新和模拟应用下载
  15. java.util.ConcurrentModificationException: null at java.util.ArrayList$Itr.checkForComodification(A
  16. 手把手教你如何获得光学成像系统的PSF(点扩散函数)——从beads成像到处理图像的经验分享
  17. Mysql闪退无法打开,试试这个方法
  18. libreelec投屏_【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(一)
  19. HTML / CSS / JS 编程入门 —— 使用 Lightly 制作可切换主题的简单网页
  20. STM32定时器输入捕获,脉宽测量知识点

热门文章

  1. (二)马克飞象Markdown编辑器的使用效果 | 以 马克飞象Markdown编辑器 为例
  2. 【宋红康 MySQL数据库】【01】数据库概述
  3. 最详细的Neo4J解读(附安装教程)
  4. 京东五星电器送扫地机器人_京东五星电器:11.11消费者为美、懒和健康买单
  5. supervisor ERROR (spawn error)
  6. python descript_Python descriptor.FieldDescriptor方法代码示例
  7. 纪念过去的一年 之V
  8. QT中的D指针与Q指针
  9. 卷积层和全连接层的区别_卷积神经网络中全连接层作用理解总结
  10. vector3.forword和transform.forword在移动上的区别