[WorldWind学习]5.相机对象

  首先查看WorldWindow的事件:OnMouseUp、OnMouseMove、HandleKeyDown,这几个方法中多次调用this.drawArgs.WorldCamera的各种属性实现了场景的控制,包括球的旋转、场景的放大缩小,上下移动。

  1. 接下来查看CameraBase类RotationYawPitchRoll虚函数:

 1 public virtual void RotationYawPitchRoll(Angle yaw, Angle pitch, Angle roll)
 2         {
 3         //    this._orientation *= MathEngine.EulerToQuaternion(yaw.Radians, pitch.Radians, roll.Radians);
 4         //    Vector3 v = MathEngine.QuaternionToEuler(this._orientation);
 5             
 6         //    if(!double.IsNaN(v.Y))
 7         //        this._latitude.Radians = v.Y;
 8         //    if(!double.IsNaN(v.X))
 9         //        this._longitude.Radians = v.X;
10         //    if(Math.Abs(roll.Radians)>Single.Epsilon)
11         //        this._heading.Radians = v.Z;
12 
13 
14             m_Orientation = Quaternion4d.EulerToQuaternion(yaw.Radians, pitch.Radians, roll.Radians) * m_Orientation;
15 
16             Point3d p = Quaternion4d.QuaternionToEuler(m_Orientation);
17             if(!double.IsNaN(p.Y))
18                 _latitude.Radians = p.Y;
19             if(!double.IsNaN(p.X))
20                 _longitude.Radians = p.X;
21             if(Math.Abs(roll.Radians) > double.Epsilon)
22                 _heading.Radians = p.Z;
23         }
RotationYawPitchRoll

  WorldCamera类的RotationYawPitchRoll方法:

 1 public override void RotationYawPitchRoll(Angle yaw, Angle pitch, Angle roll)
 2         {
 3             _targetOrientation = Quaternion4d.EulerToQuaternion(yaw.Radians, pitch.Radians, roll.Radians) * _targetOrientation;
 4             
 5             Point3d v = Quaternion4d.QuaternionToEuler(_targetOrientation);
 6             if(!double.IsNaN(v.Y))
 7                 this._targetLatitude.Radians = v.Y;
 8             if(!double.IsNaN(v.X))
 9                 this._targetLongitude.Radians = v.X;
10             if(Math.Abs(roll.Radians)>double.Epsilon)
11                 this._targetHeading.Radians = v.Z;
12         }
RotationYawPitchRoll

  MomentumCamera类的RotationYawPitchRoll方法:

 1 public override void RotationYawPitchRoll(Angle yaw, Angle pitch, Angle roll)
 2         {
 3             if(World.Settings.cameraHasMomentum)
 4             {
 5                 _latitudeMomentum += pitch/100;
 6                 _longitudeMomentum += yaw/100;
 7                 _headingMomentum += roll/100;
 8             }
 9 
10             this._targetOrientation = Quaternion4d.EulerToQuaternion( yaw.Radians, pitch.Radians, roll.Radians ) * _targetOrientation;
11             Point3d v = Quaternion4d.QuaternionToEuler(_targetOrientation);
12             if(!double.IsNaN(v.Y))
13             {
14                 this._targetLatitude.Radians = v.Y;
15                 this._targetLongitude.Radians = v.X;
16                 if(!World.Settings.cameraTwistLock)
17                     _targetHeading.Radians = v.Z;
18             }
19 
20             base.RotationYawPitchRoll(yaw,pitch,roll);
21         }
RotationYawPitchRoll

  2. CameraBase类的Pan方法:

 1 /// <summary>
 2         /// Pan the camera using delta values
 3         /// 平移相机,采用经纬度偏移量
 4         /// </summary>
 5         /// <param name="lat">Latitude offset</param>
 6         /// <param name="lon">Longitude offset</param>
 7         public virtual void Pan(Angle lat, Angle lon)
 8         {
 9             if(Angle.IsNaN(lat)) lat = this._latitude;
10             if(Angle.IsNaN(lon)) lon = this._longitude;
11             lat += _latitude;
12             lon += _longitude;
13 
14         //    this._orientation = MathEngine.EulerToQuaternion(
15         //        lon.Radians,
16         //        lat.Radians,
17         //        _heading.Radians);
18 
19             m_Orientation = Quaternion4d.EulerToQuaternion(
20                 lon.Radians, lat.Radians, _heading.Radians);
21 
22             Point3d p = Quaternion4d.QuaternionToEuler(m_Orientation);
23 
24         //    Vector3 v = MathEngine.QuaternionToEuler(this._orientation);
25         //    if(!double.IsNaN(v.Y))
26         //    {
27         //        this._latitude.Radians = v.Y;
28         //        this._longitude.Radians = v.X;
29         //    }
30 
31             if(!double.IsNaN(p.Y))
32             {
33                 _latitude.Radians = p.Y;
34                 _longitude.Radians = p.X;
35             }
36         }
Pan

  MomentumCamera类的Pan方法:

 1 public override void Pan(Angle lat, Angle lon)
 2         {
 3             if(World.Settings.cameraHasMomentum)
 4             {
 5                 _latitudeMomentum += lat/100;
 6                 _longitudeMomentum += lon/100;
 7             }
 8 
 9             if(Angle.IsNaN(lat)) lat = this._targetLatitude;
10             if(Angle.IsNaN(lon)) lon = this._targetLongitude;
11             lat += _targetLatitude;
12             lon += _targetLongitude;
13 
14             if(Math.Abs(lat.Radians)>Math.PI/2-1e-3)
15             {
16                 lat.Radians = Math.Sign(lat.Radians)*(Math.PI/2 - 1e-3);
17             }
18 
19             this._targetOrientation = Quaternion4d.EulerToQuaternion(
20                 lon.Radians,
21                 lat.Radians,
22                 _targetHeading.Radians);
23 
24             Point3d v = Quaternion4d.QuaternionToEuler(this._targetOrientation);
25             if(!double.IsNaN(v.Y))
26             {
27                 _targetLatitude.Radians = v.Y;
28                 _targetLongitude.Radians = v.X;
29                 _targetHeading.Radians = v.Z;
30 
31                 if(!World.Settings.cameraSmooth)
32                 {
33                     _latitude = _targetLatitude;
34                     _longitude = _targetLongitude;
35                     _heading = _targetHeading;
36                     m_Orientation = _targetOrientation;
37                 }
38             }
39         }
Pan

 

错误 1 无法注册程序集“F:\World_Wind_1.4.0_Source\HtmlEditor\bin\Debug\HtmlEditor.dll”- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项“HKEY_CLASSES_ROOT\onlyconnect.HtmlDialog”的访问被拒绝。 HtmlEditor

解决方法:HtmlEditor项目的属性,取消“生成(Build )”选项卡的为COM互操作注册

转载于:https://www.cnblogs.com/yhlx125/archive/2013/04/01/2987075.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在VS2010开发的MVC3 应用程序中设定默认的浏览器

vs2010做mvc3 开发,用的是Razor的View,想修改默认浏览器,发现右键没有"浏览方式",把View改成.aspx的,也没有找到这个选项. 解决方法两种 (1)最简单的,建个Asp.net Web应用程序,在随便一个xxx.aspx页面,右键"浏览方式"即可.. (2)通过修改项目属性也可以,右键…

android 获取lanucher 列表

引用&#xff1a;http://www.iteye.com/topic/696187 获取Launcher 启动列表 即 列出所有Launcher程序 通过PackageManager 来获取 [代码 步骤] 1. 定义内部类 LauncherItem 用于定义Application相关属性 比如&#xff1a;图标 名称 以及 ComponentName Java代码 public clas…

对int变量赋值的操作是原子的吗?

对于例子如下&#xff1a; int count 0; count; // 是原子操作吗? count; 是原子操作吗? 先说答案&#xff1a; 1、在单处理器下&#xff0c;如果将 count; 语句 翻译为单指令时&#xff0c;是原子操作。 不过现在处理器都会对语句进行优化。 2、在多处理器下&#xf…

企业面试中关于MYSQL重点的28道面试题解答

问题1&#xff1a;char、varchar的区别是什么&#xff1f; varchar是变长而char的长度是固定的。如果你的内容是固定大小的&#xff0c;你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么&#xff1f; DELETE命令从一个表中删除某一行&#xff0c;或多行&#xff0c;T…

普通的int main(){}没有写return 0;会怎么样?

结论可能大家看上面的图就知道了&#xff0c;没有加return 0;编译器会自动添加一个。那怎么证明呢&#xff1f; 可以查看相应的汇编代码&#xff0c;查看汇编代码推荐使用godbolt.org网站&#xff0c;相当方便。 如上图&#xff0c;输入C代码&#xff0c;在右半部分会显示编译…

python 内置方法 BUILT-IN METHODS

setattr getattr hasattr 1. abs() returns absolute value of a number 返回绝对值 integer -20 print(Absolute value of -20 is:, abs(integer)) 2. all() returns true when all elements in iterable is true 都为true则为true 3. any() Checks if any Element of an Ite…

并发与并行的区别

学习多线程的时候会遇到一个名词&#xff1a;并发。这是属于操作系统中的词汇&#xff0c;需要了解并发和并行的区别&#xff0c;从网上搜集了几种说法帮助理解。 一&#xff1a; 并发是指一个处理器同时处理多个任务。 并行是指多个处理器或者是多核的处理器同时处理多个不同的…

Oracle PL/SQL块 多表查询(emp员工表、dept部门表、salgrade工资等级表)

范例: 查询每个员工的编号&#xff0c;姓名&#xff0c;职位&#xff0c;工资&#xff0c;工资等级&#xff0c;部门名称●确定要使用的数据表|- emp表&#xff1a;员工的编号、姓名、职位、工资|- salgrade表&#xff1a;工资等级|- dept表&#xff1a;部门名称●确定已知的关…

多线程的互斥锁应用RAII机制

什么是RAII机制 RAII是Resource Acquisition Is Initialization&#xff08;翻译成 “资源获取即初始化”&#xff09;的简称&#xff0c;是C语言的一种管理资源、避免资源泄漏的惯用法&#xff0c;该方法依赖构造函数资和析构函数的执行机制。 RAII的做法是使用一个类对象&a…

asp.net 浏览服务器文件

http://www.csharpwin.com/dotnetspace/12018r482.shtml 前台文件file.aspx <% Page Language"C#"AutoEventWireup"true"CodeFile"file.aspx.cs"Inherits"file"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi…

pynput模块—键盘鼠标操作和监听

pynput.mouse&#xff1a;包含控制和监控鼠标或者触摸板的类。 pynput.keyboard&#xff1a;包含控制和监控键盘的类。 上面提到的子包都已被引入到pynput库中。要使用上面的子包&#xff0c;从pynput中引入即可。 下面有详细的示例文档。 控制鼠标 使用pynput.mouse控制鼠标&a…

Windows 恢复环境(Windows RE模式)

Windows 恢复环境 (Windows RE) 是一个能修复无法启动操作系统的常见问题的恢复环境。Windows 预安装环境 (Windows PE) 是具有有限服务的最小 Win32 操作系统。Windows RE 建立在 Windows 预安装环境 (Windows PE) 的基础上&#xff0c;并且可以用附加的驱动程序、语言、Windo…

开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

最近工作中遇到了开源许可证的问题&#xff0c;需要测试基于开源软件开发的本公司产品满足哪些开源协议&#xff0c;网上找了一些关于这方面的解答&#xff0c;在此备份下&#xff1a; 首先借用有心人士的一张相当直观清晰的图来划分各种协议&#xff1a;开源许可证GPL、BSD、M…

什么是 mmap

1. mmap 基础概念 mmap 即 memory map&#xff0c;也就是内存映射。 mmap 是一种内存映射文件的方法&#xff0c;即将一个文件或者其它对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff…

win10 + 独显 + Anaconda3 + tensorflow_gpu1.13 安装教程(跑bert模型)

这里面有很多坑&#xff0c;最大的坑是发现各方面都装好了结果报错 Loaded runtime CuDNN library: 7.3.1 but source was compiled with: 7.4.1&#xff0c;这是由于最新的tensorflow1.13需要用 Cudnn7.4.1编译。这个问题&#xff0c;StackOverflow上有人问到&#xff0c;但是…

Oracle client 安装、配置

一、安装 链接: https://pan.baidu.com/s/1Yph6hiNkCJsApAzu_Vx2ew 提取码: r9ye 二、配置 1、控制面板\所有控制面板项\管理工具\数据源(ODBC) 注&#xff1a;odbc 分 64 位和 32 位的2、测试 ODBC 连接 Oracle 数据库点击 ODBC&#xff0c;在“用户 DSN”页签下点击添加按钮…

ADO.NET- 基础总结及实例

1、ADO.NET基础介绍 &#xff08;1、程序要和数据库交互要通过ADO.NET进行&#xff0c;通过ADO.NET就能在程序中执行SQL了。ADO.Net中提供了对各种不同数据库的统一操作接口。 (2、直接在项目中内嵌mdf文件的方式使用SQL Server数据库&#xff08;基于服务的数据库&#xff09;…

获取指定日期所属年份的第一天日期或最后一天日期

写了2个自定义函数&#xff0c;获取指定日期所在年份的第一天日期或最后一天的日期&#xff1a; SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-05-09 -- Update date: 2019-05-09 -- Description: 获取指定日期所属年…

高效管理ASP.NET的JavaScript库

简介 对于ASP.NET开发人员来说,管理项目中的JavaScript都很随意&#xff1a; 我想这很大程度上可能是因为网上没有如何妥善处理ASP.NET中JavaScript的可靠信息。此文的目的就是提供一种最佳方案&#xff0c;用于管理ASP.NET中的JavaScript。该方案将能解决以下问题&#xff1a;…

【面试】c++单例模式

1. 单例模式 #include <iostream> using namespace std;class CSingleton { private:CSingleton() {} // 构造是私有的static CSingleton *m_pInstance; public:static CSingleton *GetInstance(){if (m_pInstance NULL) {m_pInstance n…