6.4 创建透视投影(Moving to a Perspective Projection)

在学习透视投影背后的矩阵运算之前,我们先来看看一个例子。在前一章节中,我们使用正交投影来适配视口在进行规范化之前的坐标。
    下图是一个正交投影的例子,正方体中的场景正是正交投影的效果,OpenGL在进行渲染的时候里面的内容就会被渲染到视口上,这些就是我们所有能看到的东西。

下图是同一个场景中不同角度看到的效果:

6.4.1 视锥体(The Frustum)

现在我们来考虑透视投影,在透视投影中平行线最终都会汇聚于一个点并且当距离越来越远的时候它会显得越来越小,另外在透视投影中我们看到的场景将会是如下图所示的视锥体:

这种形状通常叫做视锥体,它是通过透视投影及透视分割创建的。视锥体是金字塔经过切割并使得远端比近端大的一种几何体,并且远端与近端相差越大,那么相应的视角也越大同时也能看到更多的物体。
    在视锥体中有一个焦点,它是通过连接大端与小端并且延长直到他们相接为止得到的一个点,此时的交点就是视锥体的焦点。当你通过透视投影去看一个具体的场景时,你可以想象成你是在焦点处观察。从焦点到视锥体小端的距离叫做焦距,这个值会影响视角的大小及小端与大端的长度比例。
    在下图中,它就是视锥体中的一个场景,就像是从焦点处看到的一样:

在焦点处还有一个有趣的性质,那就是从此处看上去你会感觉视锥体的大端与小端在屏幕上占据着同样大小的空间;视锥体的远端其实更大,但是因为它更远,所以它占据着大小的空间;这个效果与日食类似:月球比太阳小很多,但是由于月球离我们比较近,所以看起来好像月球就完全把太阳遮挡住了;这完全就是因为视角占据了有利因素。

Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)相关推荐

  1. Part I 空气曲棍球 Chapter6(6.7 Switching to a Projection Matrix)

    6.7 使用投影矩阵(Switching to a Projection Matrix) 我们现在开始使用透视投影矩阵,打开AirHockeyRenderer并且移除onSurfaceChanged( ...

  2. Part I 空气曲棍球 Chapter6(6.1 The Art of 3D)

    6.1 3D的艺术(The Art of 3D) 几个世纪以来,艺术家们通过他们特殊的技巧在2D的纸张上画出3D场景,其实他们只是使用了线性映射这样一种技术而已,想像下一些平行的直线,当你从一端看去的 ...

  3. Part I 空气曲棍球 Chapter6(6.5 Defining a Perspective Projection)

    6.5 定义一个透视投影(Defining a Perspective Projection) 透视投影矩阵需要与透视分割配合才能构造出3D效果,投影矩阵并没有透视分割的能力,透视分割也需要其它因素一 ...

  4. Part I 空气曲棍球 Chapter6(6.8 Adding Rotation)

    6.8 增加旋转(Adding Rotation) 前面我们使用投影矩阵配合模型矩阵把桌面移入了我们的视野,现在我们要做的是给桌面增加一个旋转角度使得桌面看上去有一个角度以便增加立体感.使用旋转矩阵我 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. oracle归档日志参数reopen=30,Oracle 归档日志 -- CSDN 比较全的说明文档
  2. 第三代测序为什么这么贵?
  3. 走过2010,期盼2011!
  4. ssh开启root用户登录
  5. .NET中,字符串首字母大写的方法
  6. c语言顺序表有效元素长度,C语言版数据结构顺序表的问题
  7. html5和前端精要(1)-架构与基础(1)
  8. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
  9. 一篇文章入门Flask
  10. jquery.form.js java_教javascript函数和jquery函数的使用$(form).submit(function()
  11. java开发C语言编译器
  12. Linux下yum配置及相关问题
  13. 工具--nssm详解
  14. vba excel 画折线图
  15. 【随便说说】|| 老师用腾讯会议开直播,实在忍不住了,我......
  16. SpringBoot 之 @Transaction注解的类级别和方法级别的区别
  17. 《大秦帝国》作者孙皓晖将现身杭州华为阅读·DigiX读书会
  18. Python教你用三行代码批量添加水印
  19. 首席新媒体运营黎想教程:3步教你如何做好社群运营
  20. 改造,分刷新显卡BIOS和驱动修改两种

热门文章

  1. 关于Cocos2D-X 3.10在android平台上使用外接键盘无法响应的问题
  2. Ubuntu22+ROS2+QtCreator+Ros_Qtc_Plugin开发环境搭建
  3. 三角形质心坐标怎么求_几何画板验证三角形重心坐标公式的详细步骤
  4. 基于深度学习的目标检测DET - SSD
  5. clion使用Eigen
  6. Jemalloc优化MySQL、Nginx/Tengine内存管理
  7. 6S大脚印方法(转载)
  8. Elastic:许可协议变更澄清
  9. 【微软2023.2.27 苏州实习一面笔试题】 罗马数字转整数
  10. GOOGLE搜索秘籍全攻略