在ArcGIS体系中,三维开发包括两种:基于Scene的三维开发和基于Globe的三维开发。

由上图可以看出,两种开发的接口都很相似,掌握了Scene开发会相对容易的过渡到Globe开发中。

正如上图所示,Scene开发常用的接口有IScene、ISceneGraph、ISceneViewer、I3DViewer、ICamera等接口,除此之外IGraphicsLayers3D、I3DProperties也经常使用。

为了能弄明白各个接口之间的关系,我来做一个比喻:我们可以把上述接口映射到一场现场直播的球赛之中,Scene就是球赛本身,要进行足球比赛就得需要球场,SceneGraph就承担起了球场的作用,正是因为有了球场,足球运动员、裁判员、足球才能出现,他们都是以球场为前提才出现的。现在足球比赛就可以进行了,但是要想让在家里的观众能看到比赛实况就得需要对球赛进行现场直播,一般情况下CCTV5的直播都会安排多个摄像组,这是为了便于切换视角,从而可以很方便的让观众看到不同的三维场景,一个摄像组不仅仅包括一台摄像机,还包括至少一个摄像师、电源线等等,所以摄像组和摄像机是不等价的,他们的关系是摄像机是摄像组的重要组成部分,SceneViewer和3DViewer很相似,二者都相当于一个摄像组,而ICamera就相当于该摄像组中的摄像机。

下面介绍一下各个接口的主要功能:

Scene:

Scene之于ArcScene如同Map之于ArcMap。在一个ArcScene中,只有一个Scene对象。Scene是许多图层的集合,与ArcScene中相似的是,在一个SceneControl中只有一个Scene对象。Scene实现了包括IScene、IBasicMap、ITableCollection等在内的诸多接口,其中IScene尤为重要。

IScene主要负责图层的组织管理和选择操作,比如AddLayer、AddLayers、ClearLayers、DeleteLayer、MoveLayer等都属于对图层进行组织管理方面的功能;SelectByShape、SelectFeature、ClearSelection、SelectionCount等都是和选择要素相关的方法属性。IScene中有一个重要属性SceneGraph,该属性是只读属性,返回一个ISceneGraph对象。通过只读的SceneGraph属性,IScene与ISceneGraph实现了组合关系,前者的生命周期决定后者。注意,在这里这种组合关系是一对一的,即一个IScene对象只维护一个ISceneGraph。

SceneGraph:

SceneGraph可以看作是一个三维世界,它负责处理了大部分的三维渲染操作,并且使得绘图更有效率,它.实现了IViewers3D、IDisplay3D、ISceneGraph等接口。

IViewers3D顾名思义,提供了许多对ISceneViewer操作的方法属性,比如IViewers3D.ActiveViewer、IViewers3D.FindViewer、IViewers3D.GetAllViewers、IViewers3D.RegisterViewer、IViewers3D.UnRegisterViewer、IViewers3D.RefreshViewers等都是对ISceneViewer进行的操作。

IDisplay3D接口主要用来进行三维闪烁,比如IDisplay3D.AddFlashFeature、IDisplay3D.FlashFeatures、IDisplay3D.FlashGeometry、IDisplay3D.FlashLocation等都是用来进行三维闪烁的。

ISceneGraph是SceneGraph的一个重要接口,实现了许多IViewers3D的功能,比如ISceneGraph.ActiveViewer、ISceneGraph.FindViewer、ISceneGraph.GetAllViewers、ISceneGraph.RegisterViewer、ISceneGraph.UnRegisterViewer、ISceneGraph.RefreshViewers等;ISceneGraph.Locate和ISceneGraph.LocateMultiple用于进行定位,这是很实用的功能,在三维场景中通过鼠标单击可以确定选中了谁;该接口中还有一些以Set开头进行三维场景参数设置的函数,比如ISceneGraph.SetOwnerShadingMode 、ISceneGraph.SetOwnerLightingOption,当然也有几个相应的Get函数获取三维场景的参数,比如ISceneGraph.GetOwnerTransparency。

SceneViewer与3DViewer:

SceneViewer只实现了ISceneViewer接口,3DViewer只实现了I3DViewer接口,这两个接口非常相似,可以把I3DViewer看作是ISceneViewer的新的版本或者是代替。这两个接口相当于三维视角,比如真实三维世界中的一套套不同的摄像装备,而ICamera则相当于该套摄像装备中的摄像机,摄像机肯定是一套摄像装备中最重要的装置,所以ICamera是ISceneVierer与I3DViewer中最重要的属性。如下图所示:

从上图可以看出,两个接口的属性和方法都非常相似,只是I3DViewer比ISceneViewer多了三个和全屏相关的属性方法,图中用红色标记出,因此可以把I3DViewer看作是功能增强版的ISceneViewer。注意,这两个接口里都有一个Camera的可读写属性,通过该属性实现了ISceneViewer与ICamera的一对一的关联关系以及I3DViewer与ICamerad一对一的关联关系,关联关系中的二者的生命周期并没有直接联系。

基于SceneControl的三维GIS开发的更多相关文章

  1. 19个三维GIS软件对比

    19个三维GIS软件对比 麦豆科研技术中心 days ago 我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方 ...

  2. 国内外主流的三维GIS软件

    我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方向之一.上世纪八十年代末以来,空间信息三维可视化技术成为业界研 ...

  3. SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性

    SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...

  4. 开源(免费)三维 GIS(地形,游戏)

    先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形 ...

  5. 基于特定领域国土GIS应用框架设计及应用

              基于特定领域国土GIS应用框架 设计及应用              何仕国 2012年8月16日   摘要: 本文首先讲述了什么是框架和特定领域框架,以及与国土GIS 这个特定领 ...

  6. 华为HMS Core携手超图为三维GIS注入新动能

    6月30日,在2022(第五届)GIS软件技术大会GIS基础软件新技术板块论坛上,华为联合超图推出了基于HMS Core 3D Engine开发的高保真三维GIS插件,通过3D渲染技术助力三维GIS实 ...

  7. OpenWebGlobe-开源三维GIS初体验(附源码和演示)

    1.OpenWebGlobe简介 OpenWebGlobe是一个高性能的三维引擎.可应用于可视化仿真,游戏,三维GIS,虚拟现实等领域.它使用纯javascript编写,可以运行在任何支持HTML5. ...

  8. 基于WebGL的三维的物联网平台技术

    参加工作三年了,从一个搞调试的民工进阶为程序员,收获还是有那么一点的.慢慢讲一些. 去年在网上发现了https://hightopo.com/cn-index.html图扑软件的基于WebGL的三维j ...

  9. [转]基于C#的开源GIS项目介绍之SharpMap篇

    我是一个刚毕业的GIS本科毕业生,目前在杭州从事GIS软件应用开发.在项目开发中总感觉自己的编程水平还不够,于是想找些开源GIS小项目来研究研究,借以提高自己的编程能力和项目开发能力.在网上搜了一下“ ...

随机推荐

  1. javascript的typeof返回哪些数据类型

    javascript的typeof返回哪些数据类型 1.返回数据类型 undefined string boolean number symbol(ES6) Object Function 2.强制类 ...

  2. linux中与Oracle有关的内核参数详解

    工作当中遇到oracle运行时CPU占用率达到90%以上,调小以下参数值后恢复正常. fs.file-max = 65536 net.core.rmem_default=262144 net.core ...

  3. 电影TS、TC、BD版和HD版

    HD的意思是指HDTV,HDTV指网上下载的高清影片,它的画面品质会比BD稍差,主要表现为亮度不足,色彩不自然等.BD是指蓝光(Blu-ray)或称蓝光盘(Blu-ray Disc,缩写为BD),目前 ...

  4. unity 查找脚本被场景中哪些对象引用

    在需要查找的脚本上右键: 在场景中已经显示出所有引用该脚本的对象

  5. Jquery和Ajax

    jQuery 是一个 JavaScript 函数库.JavaScript 是 HTML5 以及所有现代浏览器中的默认脚本语言! jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 ...

  6. No matter how hard it is or no matter how bad it gets, I am going to make it!

    No matter how hard it is or no matter how bad it gets, I am going to make it! He always had a yearni ...

  7. Haskell语言学习笔记(66)Aeson

    Data.Aeson 安装 aeson $ cabal install aeson Installed aeson-1.2.3.0 Prelude> :m +Data.Aeson Prelude ...

  8. java.lang.NullPointerException - 如何处理空指针异常

    当应用程序试图null在需要对象的情况下使用时抛出.这些包括: 调用null对象的实例方法. 访问或修改null对象的字段. 把长度null当作一个数组. 像访问或修改null阵列一样访问或修改插槽. ...

  9. 奇偶数判断1(if,else if语句)

    public class 奇偶数判断 { public static void main(String [] args){ float s = 9f; //取单浮点型变量s,可为任意值 float h ...

  10. 'org.springframework.beans.factory.xml.XmlBeanFactory' is deprecated

    'org.springframework.beans.factory.xml.XmlBeanFactory' is deprecated XmlBeanFactory这个类已经被摒弃了.可以用以下代替 ...