PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程。三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进行世界变换,再通过设置观察矩阵以在场景中安置一个虚拟相机,构建一个视景体来裁剪场景的可见区域,然后在通过投影变换(平行投影或透视投影),获取三维场景的“像”,最后再通过视口变换,将场景的“像”光栅化输出到二维显示屏幕上。如下图所示。

其中投影变换主要有透视投影和平行投影两类。视景体类Frustum正是用来描述投影变换过程中的透视投影的。如下图所示。其关键参数主要有:Y向视场角、远裁剪平面、近裁剪平面、投影窗口纵横比。由这些因子可以构造一个透视投影参与三维物体渲染运算。

视景体类Frustum类的类图如下。

字段planes数组用6个平面来描述视景体的6个边界平面。

Update方法用给定的矩阵对象来更新视景体的6个边界平面。用到了Microsoft.DirectX的平面Plane结构体、Vector3类和矩阵Matrix类。

Intersects方法用来测试视景体对象与输入的外包围球是否相交。其重载形式用来测试是否与外包围盒相交。

Contains方法用来测试视景体对象是否完全包含外包围盒。

ContainsPoint方法用来测试视景体对象是否完全包含一个点向量。

WorldWind源码剖析系列:视景体类Frustum的更多相关文章

  1. WorldWind源码剖析系列:表面影像类SurfaceImage

    表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath ...

  2. WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore

    影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...

  3. WorldWind源码剖析系列:表面瓦片类SurfaceTile

    表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...

  4. WorldWind源码剖析系列:数学引擎类MathEngine

    PluginSDK中的MathEngine类是密封类.不可继承,主要完成通用的数学计算功能.由于按平面展开层层划分,所以在WW里用到一个row,col的概念,类MathEngine封装了从行/列到经/ ...

  5. WorldWind源码剖析系列:影像图层类ImageLayer

    影像图层类ImageLayer 影像图层类ImageLayer将单张影像作为纹理映射到星球表面上去.源影像必须是平面笛卡尔坐标系.该类的类图如下. 影像图层类ImageLayer提供的主要字段.属性和 ...

  6. WorldWind源码剖析系列:代理助手类ProxyHelper

    代理助手类ProxyHelper通过平台调用的互操作技术封送了若干Win32结构体和函数.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: 内嵌类型WINHTTP_AUTOPROX ...

  7. WorldWind源码剖析系列:下载请求类DownloadRequest

    下载请求类DownloadRequest是各种下载请求的抽象基类,先派生出网络下载请求类WebDownloadRequest,再派生出地理空间下载请求类GeoSpatialDownloadReques ...

  8. WorldWind源码剖析系列:绘制参数类DrawArgs

    绘制参数类DrawArgs主要对绘制时需要的对象如:设备对象Microsoft.DirectX.Direct3D.Device.Microsoft.DirectX.Direct3D.Font字体对象. ...

  9. WorldWind源码剖析系列:四叉树瓦片类QuadTile

    四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...

  10. WorldWind源码剖析系列:网络下载类WebDownload

    网络下载类WebDownload封装了对请求的瓦片进行网络下载的相关操作.该类使用了两个委托类型和一个枚举类型. 该类的类图如下. 网络下载类WebDownload各个字段和属性的含义说明如下: st ...

随机推荐

  1. JDBC流程

    最近要学习Mybatis的源码,因此对JDBC的使用进行总结. 一.JDBC概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java ...

  2. springboot中mybatis逆向工程与分页的应用

    最近在项目中应用到springboot与mybatis,在进行整合过程中遇到一些坑,在此将其整理出来,便于以后查阅与复习. 项目运行环境为:eclispe+jdk1.8+maven 一.搭建Sprin ...

  3. MYSQL一次千万级连表查询优化

    概述:交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上. 这个S ...

  4. django项目一 登录注册

    STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...

  5. 【机器学习】EM算法详细推导和讲解

    今天不太想学习,炒个冷饭,讲讲机器学习十大算法里有名的EM算法,文章里面有些个人理解,如有错漏,还请读者不吝赐教. 众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的 ...

  6. javascript:原型与原型链

    一,函数对象 所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型) 所有函数拥有prototype属性(显式原型)(仅限函数) 原型对象:拥有prototype属性的对象,在定义函 ...

  7. jquery判断浏览器的内核

    <script type='text/javascript'> $(function(){ if($.browser.msie) { alert("IE浏览器"); } ...

  8. JS 数组对象根据下标拆分成新的数组

    真为难啊! var arr = [ {guigeArr:['蓝色','XL','3','S']}, {guigeArr:['蓝色','L','6','S']}, {guigeArr:['蓝色','L' ...

  9. Application_Start 多次启动问题

    最近在重构一个项目,在重构过程中出现了Application_Start 多次启动的问题,查询资料说是应用程序池内的修改会导致这个问题,后来发现确实如此 因为在重构过程中,我将数据库文件(sqlite ...

  10. Vue -- 项目报错整理(1):RangeError: Maximum call stack size exceeded

    这几天项目运行报了个错: Uncaught RangeError: Maximum call stack size exceeded,刚开始看到 "returnNodeParameter&q ...