要把一个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. The Accomodation of Students---hdu2444(二分图,最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:有n个学生,m个关系,但是如果a认识b,b认识c,但是a不一定认识c: 求能不能把这n个人 ...

  2. http和socket之长连接和短连接区别

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  3. Mysql EXPLAIN 相关疑问: Using temporary ; Using filesort

    一.什么是Using temporary ; Using filesort 1. using filesort filesort主要用于查询数据结果集的排序操作,首先MySQL会使用sort_buff ...

  4. centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

    centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...

  5. python模块之subprocess模块

    简述 subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.*subprocess最简单的用法就是 ...

  6. 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) Solution

    A: Solved. 分别处理出每个%7后余数的数字个数,再组合一下 #include <bits/stdc++.h> using namespace std; #define ll lo ...

  7. zw版【转发·台湾nvp系列Delphi例程】HALCON SubImage

    zw版[转发·台湾nvp系列Delphi例程]HALCON SubImage procedure TForm1.Button1Click(Sender: TObject);var op : HOper ...

  8. zwPython,字王集成式python开发平台,比pythonXY更强大、更方便。

    zwPython,字王集成式python开发平台,比pythonXY更强大.更方便. 更强大,内置opencv.cuda/opencl.NLTK自然语言.pygame游戏设计等多个重量级模块库. 更方 ...

  9. 爬虫概要及web微信请求分析

    一.爬虫概要 1.网络爬虫是什么 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常 ...

  10. 基于std::string的字符串处理

    转自:http://zxdflyer.blog.163.com/blog/static/25664262201322510217495/ C++标准模板库std使用广泛.该库中处理字符串的对象为std ...