3d世界是怎样呈现到屏幕上的
2017-06-29 16:38
225 查看
要把一个3d物体呈现在屏幕上,要经过一系列的步骤。
描述3d世界
把3d世界绘制在二维屏幕上
如何描述一个3D世界?
数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线性空间)。
在空间中分为两类对象:静态的物体,物体的运动
静态的对象用 向量 表示,运动用 矩阵 表示
齐次坐标
欧几里得空间并不能充分的描述3d世界,数学家扩展了一下,出来个仿射空间。仿射空间里面的坐标叫做 齐次坐标
物体对象的运动-【模型矩阵】
一个正方体,我们知道8个顶点的信息就可以描述(即8个向量)。 把这个正方体从一个位置,移动另外一个位置, 我们只需要算出这8个顶点的新的坐标就可以了。
我们知道这是一个方程组,我们要解方程才能算出新的坐标。伟大的数学家们,发明了矩阵来解方程。
所以,矩阵是描述模型变化的。实际上就是解方程组
视图矩阵
我们描述物体都是以原点(0,0,0)点 为参考。然而实际上,我们是从摄像机来看世界的。 也就是说要以摄像机的那一点来确定一个坐标系。所有物体的坐标要转化成相对于 摄像机那点为原点的新的坐标系
要确定新的坐标系,需要几个参数,这几个参数也正好是描述摄像机的参数。
1.摄像机的位置
2.摄像机的观察点
3.摄像机的上方向(正着看,倒着看,斜着看)
这样我们会得到两个向量,一个观察点=>位置 一个上方向。 这两个向量的叉积 会得到垂直面这两个方向的法向量。
设M矩阵表达原坐标系到新坐标系的转化。那么就相当于 原世界中所有的物体左乘M的逆矩阵。
这样,3d世界就被描述了。接下来,怎么把这3d世界绘制到二维的屏幕上
投影矩阵-【[b]透视投影】[/b]
透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子
在这个图中,你从点(x, y, z)到原点画了条直线,注意直线与z=n平面相交的那个点——用黑色标记的那个
这样的投影 就会造成距离感,Z轴就聚有深度的作用。
视锥体(红色区域)以外的所有物体不会被呈现。这样形成的空间叫 裁剪空间
描述3d世界
把3d世界绘制在二维屏幕上
如何描述一个3D世界?
数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线性空间)。
在空间中分为两类对象:静态的物体,物体的运动
静态的对象用 向量 表示,运动用 矩阵 表示
齐次坐标
欧几里得空间并不能充分的描述3d世界,数学家扩展了一下,出来个仿射空间。仿射空间里面的坐标叫做 齐次坐标
物体对象的运动-【模型矩阵】
一个正方体,我们知道8个顶点的信息就可以描述(即8个向量)。 把这个正方体从一个位置,移动另外一个位置, 我们只需要算出这8个顶点的新的坐标就可以了。
我们知道这是一个方程组,我们要解方程才能算出新的坐标。伟大的数学家们,发明了矩阵来解方程。
所以,矩阵是描述模型变化的。实际上就是解方程组
视图矩阵
我们描述物体都是以原点(0,0,0)点 为参考。然而实际上,我们是从摄像机来看世界的。 也就是说要以摄像机的那一点来确定一个坐标系。所有物体的坐标要转化成相对于 摄像机那点为原点的新的坐标系
要确定新的坐标系,需要几个参数,这几个参数也正好是描述摄像机的参数。
1.摄像机的位置
2.摄像机的观察点
3.摄像机的上方向(正着看,倒着看,斜着看)
这样我们会得到两个向量,一个观察点=>位置 一个上方向。 这两个向量的叉积 会得到垂直面这两个方向的法向量。
设M矩阵表达原坐标系到新坐标系的转化。那么就相当于 原世界中所有的物体左乘M的逆矩阵。
这样,3d世界就被描述了。接下来,怎么把这3d世界绘制到二维的屏幕上
投影矩阵-【[b]透视投影】[/b]
透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子
在这个图中,你从点(x, y, z)到原点画了条直线,注意直线与z=n平面相交的那个点——用黑色标记的那个
这样的投影 就会造成距离感,Z轴就聚有深度的作用。
视锥体(红色区域)以外的所有物体不会被呈现。这样形成的空间叫 裁剪空间
相关文章推荐
- 点击屏幕,获取3d世界里的物体
- 设计自己的软渲染器2-构建3D世界到2D屏幕显示的基本变换
- D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵
- Android OpenGL ES 2.0 屏幕坐标和3D世界坐标转换
- 在3D中, 将世界坐标映射为屏幕上的坐标点
- 在3d世界里 表示 相对屏幕的 上下左右方向
- 在3D中, 将世界坐标映射为屏幕上的坐标点
- OpenGL教程之漫游3D世界
- StackOverflow的架构:.NET技术+25台服务器怎样支撑世界第53大网站
- 在3D世界中创建不同的相机模式——创建一个相机:Position,Target和View Frustum
- 游戏世界坐标转化为UGUI屏幕坐标
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- 怎样对EDIUS屏幕进行自定义布局
- 老师不能把你怎样,但外面的世界可以!
- 怎样对EDIUS屏幕进行自定义布局
- 怎样得到当前的屏幕分辨率?
- 基于HTML5的3D网络拓扑树呈现
- 探讨:3D透视投影变换详解-兼谈视平面和屏幕的宽高比问题
- Toque 3D文档:世界编辑器(概览)
- 如果没有 Android,世界会怎样?