浅谈三维场景之飞行

原创 2017年12月27日 09:38:46

<*小诗>

      在实际应用中总会遇到需要将视角转换到某个位置的情况。Scene里面也提供了相应的方法来实现。Scene. Fly方法提供了几种不同的回调方法,以满足不同的需求。但是由于其他原因的考虑,有些方法在产品的发展过程中废弃了。下面从SuperMap 9D来先整理一下那些方法是可用的,那些是过时的:
(1)可用:
Fly (Camera camera);根据指定的目标相机对象进行飞行。
Fly (LookAt lookat);根据指定的目标相机对象进行飞行。
Fly(Camera camera, int milliseconds); 根据指定的目标对象和飞行时间进行飞行。
Fly(LookAt lookAt, uint millisceonds); 根据指定的目标对象和飞行时间进行飞行。
FlyCircle(Geometry geometry, double speedRatio); 围绕指定地点旋转飞行模式,飞行过程中可以控制飞行的速度。

(2)不可用:
Fly(Camera camera, bool isDirect); 直接飞行过去还是先拉起再飞行过去
Fly(Geometry targetObject, int milliseconds); 根据指定的目标对象和飞行时间进行飞行。
Fly(Geometry targetObject, FlyingMode flyingMode); 根据指定的飞行模式和目标对象进行飞行。
Fly(Camera camera, int milliseconds, bool isDirect); 直接飞行过去还是先拉起再飞行过去
FlyPlay(Geometry line, double speedRatio, double distance); 沿线飞行模式,可以控制飞行速度和高度

      其中有一个方法被废弃了,就是Fly(Camera camera, bool isDirect);根据指定的目标相机对象和飞行时间以先拉起再飞行过去的方式进行飞行。但是实际使用中是经常遇到需要先拉高再飞到某位置的情况,今天主要就讲一下如何实现它。

实现步骤:
(1)由起点和终点位置,根据需求确定一个中间高点,这里采用最简单的方案,直接将两点直接的直线距离作为高点的高程值,高点在两点之间的中间。这样就可以根据三个点确定一条三维线。

Point3D startpoint3d = new Point3D(current_camera.Longitude, current_camera.Latitude, current_camera.Altitude);
Point3D endpoint3d = new Point3D(camera.Longitude, camera.Latitude, camera.Altitude);
Point3D point3d = new Point3D((startpoint3d.X + endpoint3d.X) / 2, (startpoint3d.Y + endpoint3d.Y) / 2, 0);
if (current_camera.Altitude > camera.Altitude)
{
point3d.Z = current_camera.Altitude + distance;
}
else
{
point3d.Z = camera.Altitude + distance;
}
Point3Ds pt3ds = new Point3Ds();
pt3ds.Add(startpoint3d);
pt3ds.Add(point3d);
pt3ds.Add(endpoint3d);
GeoLine3D GeodesicLine3d = new GeoLine3D(pt3ds);

(2)构建三维线后用飞行管理器来实现,即先将三维线转为路线,用FlyManager进行飞行。

Route route = new Route();
route.FromGeoLine3D(GeodesicLine3d);
for (int i = 0; i < route.Stops.Count; i++)
{
RouteStop routestop = route.Stops[i];
Camera cc = routestop.Camera;
cc.Tilt = 0;
routestop.Camera = cc;
}
RouteStop routestopend = new RouteStop();
routestopend.Camera = camera;
route.Stops.Add(routestopend);
route.IsLinesVisible = false;
route.IsStopsVisible = false;
FlyManager flyManager = new FlyManager();
flyManager.Scene = sceneControl.Scene;
flyManager.Routes.Clear();
flyManager.Routes.Add(route);
flyManager.Duration = millisceonds;
flyManager.Play();

具体代码可以参考静态类:SceneFly. Fly(Scene scene, Camera camera, int millisceonds)
<”param name=”scene”>场景
<”param name=”camera”>目标相机对象
<”param name=”millisceonds”>相机飞行到指定目的地所耗费的时间。单位为秒。
链接:https://pan.baidu.com/s/1jIvinX0 密码:8jrh

版权声明:本文为博主原创文章,欢迎转载,SuperMap技术问答社区 http://ask.supermap.com

问答社区常见三维问题整理

SuperMap问答社区上线,面向大众、服务大众,无论您问的问题是多么浅显易懂,我们都会热情洋溢回复您;又或者您问的问题是多么的高深难解,我们仍会尽一切能力资源去找出问题的原因,给您最终的解决方案。几...
  • supermapsupport
  • supermapsupport
  • 2017年03月29日 08:52
  • 3180

Portal for ArcGIS发布SPK三维场景可能遇到的问题---持续更新

自从ArcGIS 10.3.1版本支持Web3D之后,基于ArcGIS技术体系下的Web3D的需求越来越旺盛,特别是10.4版本之后对于倾斜摄影的支持,使Web3D的功能越来越强大,但在发布SPK数据...
  • esricd
  • esricd
  • 2016年08月08日 12:49
  • 2713

现有的图像三维重建技术介绍和比较

图像三维重建技术简介
  • dream_tingness
  • dream_tingness
  • 2014年10月21日 22:54
  • 9217

浅谈三维场景的渲染优化

浅谈三维场景的渲染优化初探                               作者:rhett                                   (一) 有效的性能评测  ...
  • pizi0475
  • pizi0475
  • 2011年05月16日 16:20
  • 2107

浅谈Java内部类的四个应用场景

  • 2009年05月11日 13:34
  • 16KB
  • 下载

浅谈Java内部类的四个应用场景

  • 2009年01月04日 17:28
  • 88KB
  • 下载

浅谈UG ,CATIA ,PRO-E ,和SOLIDWORKS等三维软件的优缺点?

solidworks最简单,各种操作符合大部分人的操作习惯,功能满足绝大部分工业设计需要,普及程度很高,包容性好,和其他软件的互相导入导出协作都做得很好,并且简单的渲染、仿真、模具设计等都很容易上手。...
  • qq_34169878
  • qq_34169878
  • 2016年03月11日 11:08
  • 1007

浅谈二维和三维图像数据

首先对于任何一个二维图像,加载入内存后都能看作一个二维像素数组。假如是一张8位图像,它的每个像素值可以用一个0~255的unsigned char表示,也就是说图像可以看成一个unsigned cha...
  • u013339596
  • u013339596
  • 2014年02月13日 17:13
  • 3196

浅谈stage3D的三维成像功能

首先,让我们了解一下三维成像的基本原理。 stage3D的坐标系是右手坐标系,同openGL,面对屏幕时,x轴指向右,y轴指向上,z轴指向屏幕外(你)。 这个坐标系是模型世界的坐标系,你可...
  • wkyb608
  • wkyb608
  • 2011年11月24日 17:37
  • 790

【腾讯TMQ】是和VR抢蛋糕,还是配合VR分蛋糕? ——浅谈三维重建和应用

作为一名智能产品测试工程师,不可避免的需要接触到最新最热的技术产品,目前,VR就是这样一种技术,“知己知彼百战不殆”,想要做好VR产品的测试工作,你必须先要了解VR是什么?VR未来的发展趋势会怎样?除...
  • TMQ1225
  • TMQ1225
  • 2016年09月13日 15:57
  • 871
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈三维场景之飞行
举报原因:
原因补充:

(最多只允许输入30个字)