基于SceneControl的三维GIS开发
在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开发的更多相关文章
- 19个三维GIS软件对比
19个三维GIS软件对比 麦豆科研技术中心 days ago 我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方 ...
- 国内外主流的三维GIS软件
我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方向之一.上世纪八十年代末以来,空间信息三维可视化技术成为业界研 ...
- SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性
SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...
- 开源(免费)三维 GIS(地形,游戏)
先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形 ...
- 基于特定领域国土GIS应用框架设计及应用
基于特定领域国土GIS应用框架 设计及应用 何仕国 2012年8月16日 摘要: 本文首先讲述了什么是框架和特定领域框架,以及与国土GIS 这个特定领 ...
- 华为HMS Core携手超图为三维GIS注入新动能
6月30日,在2022(第五届)GIS软件技术大会GIS基础软件新技术板块论坛上,华为联合超图推出了基于HMS Core 3D Engine开发的高保真三维GIS插件,通过3D渲染技术助力三维GIS实 ...
- OpenWebGlobe-开源三维GIS初体验(附源码和演示)
1.OpenWebGlobe简介 OpenWebGlobe是一个高性能的三维引擎.可应用于可视化仿真,游戏,三维GIS,虚拟现实等领域.它使用纯javascript编写,可以运行在任何支持HTML5. ...
- 基于WebGL的三维的物联网平台技术
参加工作三年了,从一个搞调试的民工进阶为程序员,收获还是有那么一点的.慢慢讲一些. 去年在网上发现了https://hightopo.com/cn-index.html图扑软件的基于WebGL的三维j ...
- [转]基于C#的开源GIS项目介绍之SharpMap篇
我是一个刚毕业的GIS本科毕业生,目前在杭州从事GIS软件应用开发.在项目开发中总感觉自己的编程水平还不够,于是想找些开源GIS小项目来研究研究,借以提高自己的编程能力和项目开发能力.在网上搜了一下“ ...
随机推荐
- UI5-文档-2.4-Node.js-Based开发环境
用于修改OpenUI5.环境是基于Node.js,用作服务器,具有一个基于Grunt的构建过程.本节提供关于初始设置.开发工作流和测试执行的信息. 常规开发过程: 不需要构建过程,您可以简单地修改任何 ...
- & 运算
var f:uint; var e:uint; f=uint.MAX_VALUE; e=1<<31; trace(f,e,f&e); //output:4294967295 214 ...
- javaweb登录界面连接数据库
实验关键截图 数据库界面 建表 2.登录界面 登陆失败 5 注册页面 5 注册成功 数据库截图
- SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...
- 首届阿里巴巴在线技术峰会,9位大V演讲整理!
https://yq.aliyun.com/articles/57826 感谢参加阿里巴巴在线技术峰会.7月19日的3场专家分享:Blink.Docker.电商互动:7月20日的云数据库十大经典案 例 ...
- RN项目中关于父子组件的通信
子组件向父组件传递数据 子控件中在相应的函数中.通过props.coallback的回调通知父组件. 父组件调用callback属性时行 绑定,并在方法中去解析使用获取到的值 . //子控件: < ...
- 如何快速实现一个command
新建一个类,实现icoomand接口 定义一个委托,为测试方便,先不考虑CanExecute的情况. 越简单越好. 代码如下: public class ExitHandler : ICommand ...
- Dungeon Game (GRAPH - DP)
QUESTION The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a ...
- 转 Appium for Mac 环境准备篇
转发地址:http://www.cnblogs.com/oscarxie/p/3894559.html 1. 爬墙因为后续安装过程中可能会碰到墙的问题,所以首先得解决爬墙的问题.我的方便,公司提供代理 ...
- 设置网站默认用IE7打开
head中加入以下内容 <meta http-equiv="X-UA-Compatible" content="IE=7" />