zoukankan      html  css  js  c++  java
  • 3d世界是怎样呈现到屏幕上的

    要把一个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轴就聚有深度的作用。

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


      

  • 相关阅读:
    Java安全之JNDI注入
    Visual Studio 2019 升级16.8之后(升级.Net 5),RazorTagHelper任务意外失败
    .Net Core 3.1升级 .Net 5后出现代码错误 rzc generate exited with code 1.
    重走py 之路 ——普通操作与函数(三)
    重走py 之路 ——字典和集合(二)
    设计模式结(完结篇)
    重走py 之路 ——列表(一)
    RestfulApi 学习笔记——分页和排序(五)
    RestfulApi 学习笔记——查询与过滤还有搜索(五)
    Android开发 Error:The number of method references in a .dex file cannot exceed 64K.Android开发 Error:The number of method references in a .dex file cannot exceed 64K
  • 原文地址:https://www.cnblogs.com/btgyoyo/p/7095232.html
Copyright © 2011-2022 走看看