基于全球的物理系统集成技术

引言

随着·····

概述

基于osgEarth渲染引擎,引入先进的物理引擎physics。

本篇主要讲述:原理和解决思路。

原理要点:

  1. 空间坐标转换
  2. 物理引擎与渲染引擎同步
  3. 无限动态大地形在物理引擎中的实现

技术要点1空间坐标转换

常用的物理引擎都是基于直角坐标系为运算基础的,重力都是以某个轴的负方向为向量,如:

Phscis  重力矢量为  (0,0,-1)

而基于全球化的物理引擎在不同的经纬度,重力的矢量是变化的。

例如(以直角坐标系为例)

地球位置

经度

纬度

重力矢量趋近

北极

0

90

0,   0,   -1

南极

0

-90

0,   0,   1

非洲几内亚

0

0

-1,   0,   0

印尼(赤道)

90

0

-1,   -1,   0

太平洋

180

0

0,   -1,   0

北京

116

40

-0.8,  -1,  -0.9

全球范围内使用物理引擎,需要实时修改重力矢量。

但是,仅仅改变重力矢量是不够的。由于数据原因,物理引擎使用的直角坐标系不能直接用于全球计算。

目前在地理信息系统中常用的有:

北京54坐标系

西安80坐标系

2000国家大地坐标系

WGS84坐标系

以最常用的WGS84举例:

它的坐标系原点位于地球质心,Z轴指向BIH1984.0定义的协议地球极方向(CTP),X轴指向BIH1984.0的零度子午面和CTP的赤道交点,Y轴通过右手规则确定。

基于地球的长半轴为:6378137.0

基于地球的扁率为:1/298.257223565

经过常规直角坐标系到WGS84的转换后,场景的数值飞的非常大,而物理引擎计算都是小数值的计算,过大的数值在引擎中使用有精度影响。在地球上使用物理引擎都是某个小区域内使用(几十公里),当需要使用时,先取附近的一个点为基准点K,然后将这小区域所有的数值N减去当前基准点K的位置放入物理引擎中计算,得到结果Z后,再将结果Z加上基准点K就得到结果M

如下所示:

N值--->物理引擎--->结果m有误差

N值--->减去基准点--->物理引擎--->结果Z--->加上基准点K--->结果M无误差

技术要点2物理引擎与渲染引擎同步

物理引擎将空间数据通过物理定律运算返回结果,能模拟出在现实中物体的状态。

渲染引擎将空间数据通过计算机模拟出视觉形态。

两个引擎用的虽然使用的数据相同,但计算和加载的方式不一样,所以,要同步两个引擎中的数据。一般情况下的做法是:将所有数据先经过物理引擎处理,再将处理后的数据放入渲染引擎中显示,这样做数据一直是同步的。不过,在处理全球范围的数据时,数据量太大,物理引擎太慢,渲染帧数又有高要求,就不能采用线性的处理方式。

在实际使用中,我们用了多线程技术和时间同步技术。数据有两份,在物理引擎中一份,渲染引擎中一份。物理引擎每次返回结果后就修改数据的状态机,而渲染引擎每帧都会去遍历数据状态并刷新场景。这样物理引擎的计算时间并不影响渲染时间,提高效率。在时间同步上,渲染引擎因为是读取状态机而不进行计算,所以使用的是物理引擎的时间,不会出现位置和时间偏差。

技术要点3无限动态大地形在物理引擎中的实现

将全球的数据全加入物理引擎,在目前的硬件条件下还达不到。目前只能动态的加载和卸载地形数据。

当前的全球渲染引擎,将地球划分为一个一个的小瓦片。物理引擎也使用相同的数据。

首先,创建九个地形瓦片:

1  2  3

4  5  6

7  8  9

以当前经纬度所在的瓦片为5,并将周围的8个瓦片用渲染引擎中的数据或其他高程数据填充就得到了一块小的物理地形,可以进行物理计算。

当物理场景需要移动时,如向右移动,见下图下:

1x  2x  3x          3y

4x  5x  6x  -->   6y

7x  8x  9x          9y

先将新的三个瓦片加入物理引擎中,变成12个瓦片

1x  2x  3x  3y

4x  5x  6x  6y

7x  8x  9x  9y

再将最左边的三个瓦片卸载,变成9个瓦片

2x  3x  3y

5x  6x  6y

8x  9x  9y

修改索引编号,回到原点

2x  3x  3y          1x  2x  3x

5x  6x  6y   -->   4x  5x  6x

8x  9x  9y                7x  8x  9x

往其他方向的移动使用相同原理。

以上的技术,已经实现

[原]关于phycis集成到osgearth的(瞎写写)的更多相关文章

  1. C#基本方法(瞎写写)

    public static IEnumerable<T> GetAll<T>() where T : new() { using (var conn = new Profile ...

  2. Qt里的slot

    昨天出了一个小bug, 一直调都没调出来, 今天仔细看了下, 发现出错的原因了. 我在用osgEarth的时候, 用到一个类MapCatalogWidget, 觉得它不够用, 就把这个类给改了下, 添 ...

  3. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  4. 自研网关纳管Spring Cloud(一)

    摘要: 本文主要从网关的需求,以及Spring Cloud Zuul的线程模型和源码瓶颈分析结合,目前最近一段时间自研网关中间件纳管Spring Cloud的经验汇总整理. 一.自研网关纳管Sprin ...

  5. XyTalk企业即时通讯IM开始开源

    网址: https://gitee.com/475660/xyTalk-pc https://github.com/xy-Group/xyTalk-pc Xy.Platform是一个高性能.可扩展的企 ...

  6. CPU执行程序的原理(简化过程)

    前言 看了网上的一些描述CPU执行程序的过程,发现他们涉及到的内容太多了,恨不能把整个CPU的底层结构都拿出来说,这对计算机理论知识匮乏的新人甚至是一些老人都是非常不友好的.这个问题也是当初拦在我面前 ...

  7. (转)FS_S5PC100平台上Linux Camera驱动开发详解(一) .

     平台linuxstructlinux内核videocam 说明:        理解摄像头驱动需要四个前提:        1)摄像头基本的工作原理和S5PC100集成的Camera控制器的工作原理 ...

  8. 蒟蒻的9个背包的浩大工程(更新中)(无限延期)(太长了不舍删虽然写的lj的一匹)

    所以说这就是一篇写炸的废文!!!! 所以说背包直接看dd大神的就好了,算了瞎写写吧. 0/1背包 有n件物品和一个容量为C的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品放入背包可使 ...

  9. 面向服务体系架构(SOA)和数据仓库(DW)的思考

    摘要: 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse,DW)都介绍的很多,提出了很多优秀的解决方案,但是一般是把 SOA 和 DW 单独考虑,SOA 和 DW 有着共同 ...

随机推荐

  1. 使用HttpClient进行远程接口测试

    前两天在工作中,项目组长给我了一个远程接口让我给测一下,因为是http协议,所以我首先想到了用httpClient工具类来测试,网上一查,找到了好多示例代码,随便复制了一个demo进行了简单的修改,结 ...

  2. Pandas之Dropna滤除缺失数据

    import pandas as pd import numpy as np from numpy import nan as NaN 一.处理Series对象 通过dropna()滤除缺失数据 fr ...

  3. jmeter bean shell断言加密的响应信息(加密接口测试二)

    断言加密的响应信息 1.在http请求-->添加-->断言-->bean shell 断言 import com.changfu.EncryptAndDecryptInterface ...

  4. 020-安装centos6.5后的生命历程

    01.配置网络.修改了ifcfg-eth0文件内容. 1)ifcfg-eth0原来的内容如下: 2)ifcfg-eth0配置后的内容如下:   3)然后重启网络服务: 4)测试网络是否可通: 5)查看 ...

  5. 20155239 2016-2017-2 《Java程序设计》第5周学习总结

    教材内容学习 第八章 JAVA异常架构 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性 ...

  6. 持续集成之二:搭建SVN服务器--Apache HTTP Server安装

    安装环境 Red Hat Enterprise Linux Server release 7.3 (Maipo) jdk1.7.0_80 httpd-2.4.35.tar.gz apr-1.6.5.t ...

  7. nginx 参考文章汇总

    Nginx 反向代理.负载均衡.页面缓存.URL重写及读写分离详解: http://freeloda.blog.51cto.com/2033581/1288553 Nginx开发从入门到精通: htt ...

  8. cojs 强连通图计数1-2 题解报告

    OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...

  9. P3868 [TJOI2009]猜数字

    [TJOI2009]猜数字 中国剩余定理 求解i=1 to n : x≡a[i] (mod b[i])的同余方程组 设 t= ∏i=1 to n b[i] 我们先求出 i=1 to n : x≡1 ( ...

  10. js常量

    原文链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const const 声明创建一个 ...