要把一个3d物体呈现在屏幕上,要经过一系列的步骤。

  • 描述3d世界
  • 把3d世界绘制在二维屏幕上

如何描述一个3D世界?

  • 数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线性空间)。
  • 在空间中分为两类对象:静态的物体,物体的运动
  • 静态的对象用 向量 表示,运动用 矩阵 表示

齐次坐标

欧几里得空间并不能充分的描述3d世界,数学家扩展了一下,出来个仿射空间。仿射空间里面的坐标叫做 齐次坐标

物体对象的运动-【模型矩阵】

一个正方体,我们知道8个顶点的信息就可以描述(即8个向量)。 把这个正方体从一个位置,移动另外一个位置, 我们只需要算出这8个顶点的新的坐标就可以了。

我们知道这是一个方程组,我们要解方程才能算出新的坐标。伟大的数学家们,发明了矩阵来解方程。

所以,矩阵是描述模型变化的。实际上就是解方程组

视图矩阵

我们描述物体都是以原点(0,0,0)点 为参考。然而实际上,我们是从摄像机来看世界的。 也就是说要以摄像机的那一点来确定一个坐标系。所有物体的坐标要转化成相对于 摄像机那点为原点的新的坐标系

要确定新的坐标系,需要几个参数,这几个参数也正好是描述摄像机的参数。

1.摄像机的位置

2.摄像机的观察点

3.摄像机的上方向(正着看,倒着看,斜着看)

这样我们会得到两个向量,一个观察点=>位置 一个上方向。 这两个向量的叉积 会得到垂直面这两个方向的法向量。

设M矩阵表达原坐标系到新坐标系的转化。那么就相当于 原世界中所有的物体左乘M的逆矩阵。

这样,3d世界就被描述了。接下来,怎么把这3d世界绘制到二维的屏幕上

投影矩阵-【透视投影】

透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子

在这个图中,你从点(x, y, z)到原点画了条直线,注意直线与z=n平面相交的那个点——用黑色标记的那个

这样的投影 就会造成距离感,Z轴就聚有深度的作用。

视锥体(红色区域)以外的所有物体不会被呈现。这样形成的空间叫 裁剪空间


  

3d世界是怎样呈现到屏幕上的的更多相关文章

  1. IOS UIView 01-View开始深入 绘制像素到屏幕上

    注:本人是翻译过来,并且加上本人的一点见解. 前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发 ...

  2. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

  3. NeHe OpenGL教程 第十课:3D世界

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. DirectX 11---从空间变换来看3D场景如何转化到2D屏幕

    DirectX 11---从空间变换来看3D场景如何转化到2D屏幕 在看<Introduction to 3D Game Programming with DirectX 11>的时候,发 ...

  5. 向 3D 世界迈出一小步

    前言 OpenGL 的学习资料很多,一个是比较著名的 OpenGL 红宝书<OpenGL 编程指南>,可以在这里 http://opengl-redbook.com/ 下载该书配套的源代码 ...

  6. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  7. Unity3D之如何创建正确的像素比在屏幕上

    关于这篇文章的命名,实在不知道怎么命名好,大概功能就是:比如一张宽高为100x100的图片显示在屏幕上,那2D摄像头的Size值为多少时,屏幕上显示出来图片大小和图片的实际像素一致. 这里涉及到一个G ...

  8. 【Stage3D学习笔记续】真正的3D世界(六):空间大战

    这就是书上的最终效果了,一个完整的空间大战游戏: 点击查看源码 这里并没有太多的新知识,所涉及的东西更多的是游戏开发方面的优化和技巧,下面我们大家一起来看看: 飞船: 类似粒子效果中的粒子创建方法,我 ...

  9. 【Stage3D学习笔记续】真正的3D世界(二):显示模型

    虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告 ...

随机推荐

  1. 比特币 BTC本地测试节点

    BTC本地测试节点 #环境 ubuntu 16.4 #客户端安装 #下载页面 #https://bitcoin.org/zh_CN/download cd /opt/ wget https://bit ...

  2. springboot的相关信息

    Maven的配置:zzp_settings.xml <?xml version="1.0" encoding="UTF-8"?> <setti ...

  3. (转) bicabo Visual Studio 2012自动添加注释(如版权信息等)

    如何使用Visual Studio 2012给程序文件的头部自动添加如下的注释? /********************************************************** ...

  4. centos远程访问mssql数据库

    http://blog.path8.net/archives/5921.html http://www.jaggerwang.net/2013/03/18/centos%E4%B8%8B%E5%AE% ...

  5. HIVE: 自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)

    我们的输入文件 hello0, 内容如下: xiaowang 28 shanghai@_@zhangsan 38 beijing@_@someone 100 unknown 逻辑上有3条记录, 它们以 ...

  6. 【运维技术】windows安装apache服务器,实现域名对应端口的解析跳转

    linux 安装参考搭建dede项目的功能 windows 安装虚拟机的指南参考:http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.h ...

  7. RocEDU.阅读.写作《苏菲的世界》书摘(七)

    * 康德认为"事物本身"和"我眼中的事物"是不一样的.这点很重要.我们永远无法确知事物"本来"的面貌.我们所知道的只是我们眼中"看 ...

  8. 使用ShellExecute打开目标文件所在文件夹并选中目标文件

    转载:http://blog.csdn.net/chenlycly/article/details/7366364 转载:http://bbs.csdn.net/topics/50440550 She ...

  9. myeclipse删除项目后重新导入

    今天安装了myeclipse2017版,刚开始导入项目后然后删除了,发现再次导入进来的时候不可以了. 解决方法:点击file -- >switch workspace -- >other ...

  10. Pandas数据分析python环境说明文档

    1. 要求windows系统 2. pycharm编程环境并要求配置好python3.x环境 pycharm可在官网下载,下面是链接. https://www.jetbrains.com/zh/pyc ...