cesium中文网,cesium怎么读
简介
这是一个基于c开发的3d地理空间库
3dtiles运行时轻量级glTF序列化和反序列化高精度3D地理空间数学类型和函数的流式传输,包括对全球范围WGS84椭球体的支持,目前主要用于加载基于unreal引擎的3D Tiles数据。网址:
https://github.com/CesiumGS/cesium-native
它的代码管理基于cmake。本文主要研究cmake的代码管理模式。CMake是一个跨平台的安装编译工具,可以用简单的语句描述所有平台的安装(编译过程)。
Cmake结构
Cmake由CMakeLists.txt描述,整个项目有三个核心cmakelists.txt,分别是
1放在主目录的铯本地文件夹中。
每个业务功能文件夹中2个
在3外部文件夹中
主目录是整个项目的入口,负责整体管理。
每个业务功能文件夹主要负责其具体模块的编译设置。
extern文件夹主要负责管理外部库的编译。请参考下图:
主目录目录列表
这里定义了通用函数,以方便后续使用,以及工程编译的控制。以下是关键点:
1设置debug编译的库添加后缀d。
set(铯调试后缀 d )
set(铯释放后缀)
set(CMAKE _ DEBUG _ POSTFIX $ {铯_DEBUG_POSTFIX})
set(CMAKE _ RELEASE _ POSTFIX $ {铯_RELEASE_POSTFIX})
set(CMAKE _ MINSIZEREL _ POSTFIX $ {铯_RELEASE_POSTFIX})
set(cmake _ relwithdebinfo _ postfix $ {铯_ release _ postfix}) 2定义了文件搜索函数。
分配起来很方便。h和。cpp文件到变量。还支持正则表达式查找。
函数(铯_ GLOB _ FILESOUT _ VAR _ NAME REGEXES)的使用示例如下:给所有文件名分配后缀。src下的cpp添加到ADD_SOURCES变量中。
ceum _ glob _ files(add _ sources src/*。CPP) 3重新定义依赖关系
定义外部库头文件和lib的依赖函数,可以自动将外部库的文件和库设置为需要使用的库。
函数(target _ link _ libraries _ system target scope)的使用示例如下。glm和uriparser的文件夹和库自动设置为CesiumUtility库,参考外部库非常方便。
目标_链接_库_系统(
cesium实用程序
公众的
全球语言监测机构
uriparser
)4定义了一个通用的编译器设置函数。
设置统一的编译环境如C版本、编译级别等。
函数(配置铯库目标名)5添加要编译的项目。
通过add _子目录添加那些需要编译的项目。对于外部库,采用按需编译,所以增加了参数EXCLUDE_FROM_ALL。
Add _子目录(extern exclude _ from _ all)业务目录列表
在这里,找到一个业务模块进行研究。其他都差不多。挑选
CesiumIonClient/CMakeLists.txt文件。
按顺序研究:
1定义库名
Add _ library (cesiumclient) 2设置编译参数,主目录中定义的函数在这里调用。
configure _ cecium _ library(cesium client)3获取要编译的文件列表,在这里调用主目录中定义的函数。
铯原子团文件(铯离子客户端源SRC/*。CPP) 4设置目标属性,将头文件赋给PUBLIC_HEADER。
set _ target _ properties(CesiumIonClient
性能
PUBLIC _ HEADER $ {铯离子客户端公共标题}
)5设置要编译的源代码,设置之前获取的文件列表。
目标来源(
CesiumIonClient
私人的
$ {铯离子客户端来源}
$ {铯离子客户端标题}
公众的
$ {铯离子客户端公共邮件头}
)6设置头文件包含的路径。
目标包含目录(
CesiumIonClient
系统公共
$ { CMAKE _ CURRENT _ LIST _ DIR }/include
)7设置依赖库。
目标_链接_库(CesiumIonClient
公众的
CesiumAsync
cesium实用程序
私人的
csprng
modp_b64
PicoSHA2
)8设置依赖关系的库依赖包括头文件和主文件中定义的调用函数。
目标_链接_库_系统
私人的
httplib:httplib
)9安装头文件和编译好的库。
安装(目标为CesiumIonClient
库目标${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER目标$ { CMAKE _ INSTALL _ include dir }/CesiumIonClient
)外部依赖CMakeLists
在文件路径extern/CMakeLists.txt下。这里对外部库的引用分为3种情况。
第一种通过添加_子目录直接引用,一共有12个库这么实现。
添加_子目录(第二条)
添加子目录(GSL)
添加_子目录(KTX-软件
添加子目录(uriparser)
添加子目录(德拉科)
添加子目录(glm GLM)
添加_子目录(tinyxml2)
添加_子目录(asyncplusplus)
添加子目录(spdlog)
添加_子目录(sqlite3)
添加子目录(modp_b64)
添加子目录(cpp-httplib)第二种,对于没有卡姆克文件的库,写一个库,这种类型有四种。
添加库(S2几何)
add _ library(c sprng c sprng/source/c sprng。CPP)
添加库(PicoSHA2接口)
添加库(earcut接口)第三种,只把库文件进行收集,在需要使用的地方去用,有2个库这么操作。
设置(铯_原生_ STB _ INCLUDE _ DIR $ { CMAKE _ CURRENT _ LIST _ DIR }/STB
内部缓存
包括机顶盒(Set-Top-Box)库目录
)集(铯_原生_快速_包含_目录
$ { CMAKE _ CURRENT _ LIST _ DIR }/rapid JSON/include
内部缓存包括拉皮德森目录
)总结
铯原生的的第一种组织结构基本上研究完了。这种处理组织方式可以很方便的扩展外部库的依赖以及内部库的增加,非常适合我们借鉴。
写在最后
欢迎关注公众号并加群交流
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。