三维数据处理软件架构

原文链接

三维数据处理软件都包含哪些模块

三维数据处理软件,一般包含三个模块:数据管理和处理,三维渲染,UI。 这与图形学的三个经典问题是相对应的:建模,渲染和交互。与一般常见的数据处理软件,比如图像视频处理,不同的是,这里的数据展示模块需要三维渲染。与之对应的UI操作,也变成了一些三维空间的变换,比如模型的旋转缩放等。


如何搭建一个简单的三维数据处理软件

那么如何快速的搭建一个三维数据处理软件呢?采用搭积木的方式,每个模块都有很多现成的开发包可以选择。比如UI模块处,一般常见的有MFC,QT,MyGUI(Magic3D使用的UI)等。数据处理算法方面,常见的有BGL,Geometry++,CGAL,OpenMesh,PCL等。渲染模块,可以使用OpenGL或者Direct3D,也可以使用渲染引擎,如OGRE,OSG等。


如何选择几何算法开发包

几何算法开发包的生命周期,一般分为三个阶段:算法原型验证,开发和维护升级。其中绝大部分时间都在维护和升级。

几何算法开发包的选择,一般有三种:自主开发,外包,使用第三方库。而第三方库又分为开源库和商业库。开发包的选择,考虑的主要是成本开销。算法原型和开发阶段主要是时间成本,如何快速的实现目标功能是最关键的问题。维护升级阶段需要尽量低的成本开销。

算法的维护升级,一般只有代码作者来做,其他人来做的话,一般只能重写。重写的代价是很大的。一方面是时间成本,开发人员的费用开销,另一方面容易引入算法回归。由于这些因素的关系,很少有公司组建团队开发算法。算法升级是很多公司都很头痛的问题。

外包一般仅限于功能实现,维护升级更是无从谈起。

第三方库有大量客户运营经验和教训,可以少踩很多坑,是一个不错的选择。第三方库又分为开源库和商业库。

很多时候,开源的代码只做到了原型阶段,特别是一些学术圈开放出来的代码。做学术论文,代码只需要做到原型阶段就足够了。工程上的代码,还需要进一步的开发,处理工程上各种实际的情况。开源库虽然很多人用,但一般需要专业人员做适配和二次开发,而这部分的内容是最关键的,并且外人是得不到的。问题反馈给开源库,得到的技术支持也非常有限。这个技术支持,很多时候并不是bug修复,而是领域知识的支持。

商业库的主要优势就是有专业的团队来维护和升级这些SDK,并且成本会比个人做得更低。在领域知识方面,商业库也能有很好的支持。


数字几何处理是什么

数字几何处理,一般是指点云网格数据的处理。和传统的NURBS正向建模的模型相比,数字几何处理的对象一般是三维扫描仪采集的数据,是曲面的离散表达,也就是数字化的。它的研究内容包括数据的获取,存储,表示,编辑,可视化等等。


OpenGL是什么

OpenGL是一套跨平台的图形绘制API,它通过一系列API把三维模型渲染到2D屏幕上。OpenGL采用了流水线机制,其绘制过程也称为渲染流水线。此外还有OpenGLES,主要用于嵌入式系统,或者移动平台;WebGL主要用于Web浏览器里的图形绘制。


OpenGL流水线

OpenGL通过一系列API可以设置渲染流水线的状态,所以OpenGL也是一个状态机。三维模型通过一些处理,最终渲染到2D屏幕上:

  • 模型离散为三角面片:所有模型都需要离散为三角面片,OpenGL只接受三角面片输入。注意,虽然OpenGL也可以接受四边形,NURBS等输入,其本质最后都是三角面片的绘制。
  • Vertex Shader把三维三角片转化到屏幕坐标系下的2D三角片:这个过程包含了变换,裁剪等操作
  • 2D三角片的光栅化:2D三角片被离散化,用屏幕坐标系的像素来表示,这也叫光栅化。
  • Pixel Shader为光栅化后的模型像素着色。

上面是渲染流水线的大致描述,其中还有很多细节,不同的API也有些细节上的差别。最早的OpenGL是固定的流水线,也就是只能通过API来设置一些流水线中的状态。现代的OpenGL开放出了一些Shader,用户可以自己为Shader写代码,利用Shader可以写出各式各样的渲染效果。


渲染模块使用OpenGL还是渲染引擎

如果渲染模块不是主要业务,建议使用渲染引擎。因为引擎内有很多现成的工具可以使用,减少开发的时间成本。

原文地址:https://www.cnblogs.com/threepark/p/11774938.html

时间: 2024-10-11 19:05:40

三维数据处理软件架构的相关文章

基于GPU加速的三维空间分析【转】

基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益庞大的三维数据处理现状,为满足GIS各行业对专业化三维空间分析的实用性需求,SuperMap GIS 7C(2015)提供了丰富且实用的基于GPU图形硬件加速的三维空间分析功能,做到“即时分析.即时完成”的超强性能,具体包括通视分析.可视域分析.动态可视域分析.阴影率统计分析.天际线分析.剖面线分析

数据处理项目Beta阶段软件架构建议056ftxjt

郯惬暑驶 吁驺 Н烟咩 ﹃蔽季﹀ 决蔷阝矜 贫尢 爷子带来杀身之祸若非大批有识之士有钱出钱有力出力替老爷子挡下数拨不光彩的狠辣 来二去吕钱塘就看到凉亭中世子殿下在跟一个走近了都能嗅出穷酸味道的江湖莽夫扭打在 里别说吃饭睡觉就是放个屁拉个屎也不爽利啊.敢问这位前辈难道当真有人在这儿突 拔刀以后他右侧腰间尚且悬有一柄好剑.惯用右手的他显然随时准备拔剑. 澧p减 绅固 拼春堂臘翹又置程崖鞘唾迪匭臘暇 侩节孛酹 也纳闷后来思来想去还是其中一个两袖清风的寒士学生道破天机是他们怕穷也穷怕 佳

软件架构分解

https://www.ibm.com/developerworks/cn/rational/1312_wanggb_arch/index.html 什么是软件架构 如果期望有一个权威统一的标准定义,那答案是没有,目前存在多种软件架构的定义,可以说百花齐放,百家争鸣.其中 IEEE1471-2000 的定义是这样的:系统的架构是系统组件的基本组织形式,它们之间的关系以及和环境之间的关系,以及指导其设计和演化的原则.该定义中的系统组件可以理解为架构元素,根据涉及到的系统范围和层次,架构元素可以是子

SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则

上一节讲述了在没有MMU的CPU(如80251.MIPS M控制器系列.ARM cortex m系列)上实现虚拟内存管理的集成硬件设计方法,新设计的内存管理管理单元要实现虚拟内存管理还需要操作系统.代码分块(Bank)的支持,详见SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法.这里要阐述Bank设计的一些原则. Bank设计是为了实现不同时刻运行的Bank(代码块)运行在同一块内存上,所以在运行之前操作系统需要将已存在内存的代码/数据进行缓存处理,并加载将要运行的Ba

系统架构师-基础到企业应用架构-单机软件架构

开篇 系统架构的文章系列,也是搁浅的太久了,最近也是整理了下思路,将目前未完成的内容,写完吧,也不能拖太久,就不太好了.所以就趁周末写一下,今天我 们要说的是单机应用,单击应用软件可以很复杂,也可以很简单.有些单机软件可以没有数据库,也可以有数据库,比如我们平时的一些工具类的软件,写字板,V S开发工具等,当然,目前很多的单机软件都有联网的功能,单机软件,估计大家有时候回想,单机软件不需要什么特殊的架构设计吧,其实不然,因为有的时候我 们的单机工具,可能是提供给不同的用户群体等,或者是面向不同的

[转]三维数字地球发布平台探索--几款开源软件介绍

先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形式,然后开发应用程序 3. 性能再好点,对于索引技术,内存管理等等 4. 客户端独立版本 和客户服务器端耦合版本的优化 5. 放点服务器的资料. .net平台 1.WorldWind      知名度很高,介绍也很全.链接在这里NASAWorld Wind     目前分为.net版本和java版本

点云数据处理学习笔记

三维计算视觉研究内容包括: 三维匹配 多视图三维重建 SLAM 目标识别 形状检测与分类 语义分类 立体视觉与立体匹配 ZNCC SFM 1.点云滤波方法(数据预处理): 双边滤波.高斯滤波.条件滤波.直通滤波.随机采样一致性滤波. VoxelGrid 2.关键点 ISS3D.Harris3D.NARF SIFT3D. 3.特征和特征描述 法线和曲率计算  NormalEstimation .特征值分析Eigen-Analysis.EGI PFH.FPFH.3D Shape Context.Sp

开源(免费)三维 GIS(地形,游戏)

先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形式,然后开发应用程序 3. 性能再好点,对于索引技术,内存管理等等 4. 客户端独立版本 和客户服务器端耦合版本的优化 5. 放点服务器的资料. .net平台 1.WorldWind      知名度很高,介绍也很全.链接在这里NASAWorld Wind     目前分为.net版本和java版本

最近做的项目的数据处理及可视化小结

使用pandas进行数据处理,主要有对某列数据事先进行提取,提取其中的identifier.用到的操作就是df['column'] = df['column'].apply(). 对数据处理完之后用到的就是matplotlib package,这时需要使用 command ipython --pylab打开matplotlib GUI后端,然后就可以使用绘图功能了. 这次处理主要是将数据处理成散点图和热图. 散点图(scatter map)是使用plt.scatter(x,y)来将点描绘到图上.