- 博客(36)
- 资源 (8)
- 收藏
- 关注
原创 C++学习(七十二)英寸 厘米 像素 dpi 分辨率
1英寸(in)=2.54厘米(cm)1厘米(cm)=0.3937008英寸(in)电子地图比例尺1:50000,实际图上1厘米(cm)表示500m电子地图的分辨率一般为300dpi,也就是每英寸有300个像素点,每个像素点的长度为1/3001pt=1/300in=2.54/300cm,表示2.54*500/300m=4.23m也即1:50000的电子地图在300...
2019-09-30 22:32:38 2830
原创 C++学习(七十一)3Dtiles glTF glb b3dm
一、glTFglTF表示了渲染一个模型的几何数据、纹理数据、材质数据、元数据等。glTF一般用于表示一个具体模型,比如汽车、树木等,不会用于表示一个数字城市,数字城市一般用3DTiles来表示。glTF的整体设计,概括有四点:第一,数据块(Buffer)连续,保证了读写性能;第二,提供了视图(View)和访问器(Accessor)的概念,在不损失数据块完整性的前提下提供类型信息和读取规范,...
2019-09-30 22:21:07 14121 1
原创 C++学习(七十)IaaS PaaS SaaS
一、SaaS软件即服务(也称为云应用程序服务)代表了云市场中企业最常用的选项。 SaaS利用互联网向其用户提供应用程序,这些应用程序由第三方供应商管理。 大多数SaaS应用程序直接通过Web浏览器运行,不需要在客户端进行任何下载或安装。Google Apps、Dropbox、Salesforce、Cisco WebEx、Concur和GoToMeeting等二、PaaS云...
2019-09-29 21:51:49 399
原创 C++学习(六十九)国产先看GPU
在CPU处理器领域,国产已经涉足了ARM、MIPS甚至X86等多种指令集架构,不论自研还是授权都已经有所成就,但在GPU领域,国内厂商面对AMD、NVIDIA两座大山恐怕连影都追不上。GPU市场的门槛太高,所以国内搞GPU自主研发的公司也有不少,但是作出成绩的不多,长沙景嘉微公司以军用GPU起家,此前研发的景美JM5400 GPU已经实现了军用领域的国产替代。长沙景嘉微电子股份有限公司成立...
2019-09-28 22:49:59 718
原创 C++学习(六十八)超线程
一、什么是超线程超线程(HT, Hyper-Threading)是英特尔研发的一种技术,于2002年发布。超线程技术原先只应用于Xeon处理器中,当时称为“Super-Threading”。之后陆续应用在Pentium 4 HT中。早期代号为Jackson。通过此技术,英特尔实现在一个实体CPU中,提供两个逻辑线程。之后的Pentium D纵使不支持超线程技术,但就集成了两个实体核心,所以...
2019-09-28 22:42:43 487
原创 C++学习(六十七)虚拟化
一、什么是虚拟化虚拟化(Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。二、为什么要虚拟化在实际中,虚拟化技术主...
2019-09-28 22:30:20 900
原创 C++学习(六十六)IoT和AIoT
loT是物联网的英文名称,是Internet of Things的缩写AloT是物联网的英文名称是All in IoT的缩写
2019-09-28 21:26:44 898
原创 C++学习(六十五)进程内存布局
低地址高地址堆向高内存地址生长,栈向低内存地址生长。C++程序的内存格局通常分为四个区:代码区(code area),全局数据区(data area),堆区(heap area),栈区(stack area)(即自由存储区)。所有类成员函数和非成员函数代码存放在代码区;全局数据区存放全局变量,静态数据和常量;余下的空间都被称为堆区;为运行函数而分配的局部变量、函数参数、...
2019-09-27 06:25:18 126
原创 C++学习(六十四)虚函数表_vfptr
在调试程序时,经常会遇到类下面有_vfptr(定义为void**类型),它其实是虚函数表指针(本质是函数指针数组,数组的内容为函数指针)。
2019-09-27 05:55:21 311
原创 C++学习(六十三)指针数组和数组指针
指针数组(类似整型数组、浮点型数组),指数组里的元素为指针。#define ARRAY_LEN 100char *myStrPtr[ARRAY_LEN] = // char指针的数组{ // 墨菲定律的几条推论:“会出错的事,总会出错。”“世上没有绝对正确的事情。”“每个解决办法都会衍生出新的问题。”};数组指针(类似整型指针、浮点型指针),指针指向的是数组。...
2019-09-26 22:28:47 124
原创 C++学习(六十一)对象的内存布局
C++对象的内存布局要想知道C++对象的内存布局, 可以有多种方式, 比如:输出成员变量的偏移, 通过offsetof宏来得到 通过调试器查看, 比如常用的VSclass Base1{public: int base1_1; int base1_2;};sizeof(Base1) 8offsetof(Base1, base1_...
2019-09-26 06:56:54 61
原创 C++学习(六十)开源的神经网络库
https://github.com/alibaba/MNNhttps://github.com/Artelnics/OpenNNhttps://github.com/clab/dynethttps://github.com/intel/mkl-dnnhttps://github.com/pjreddie/darknet
2019-09-24 21:50:59 1621
原创 osg学习(二十九)地形夸张
使用rex引擎,地形夸张看不出来<options> <profile>epsg:4326</profile> <terrain driver="rex"> <vertical_scale>50.0</vertical_scale> </terrain> <cac...
2019-09-24 06:38:11 631
原创 osg学习(二十八)有关kml和kmz
KML (keyhole markup language)是以XML语言为基础开发的一种文件格式,用来描述和存储地理信息数据(点、线、面、图片等),是纯粹的xml文本格式,可用记事本打开编辑,所以kml文件很小。KML跟XML文件最大的不同就是KML描述的是地理信息数据。最早开发KML的是keyhole公司,2004年Goole收购keyhole并用KML开发GooleEarth.2008 年4月...
2019-09-22 22:51:58 1000
原创 osg学习(二十七)earth文件中的viewpoint没有解析出来
解析代码有从MapNode* mapNode = MapNode::load( arguments );换为osg::Node* node = MapNodeHelper().load(arguments, &viewer);
2019-09-22 18:10:32 402 1
原创 osg学习(二十六)earth文件解析过程
earth文件本质是xml文件,在osgEarth中earth文件采用XmlDocument来组织,具体是由TiXmlDocument来负责解析的。TiXmlDocument是开源TinyXml库中的一个类。
2019-09-21 16:50:03 557
原创 osg学习(二十六)osgearth文件的解析
earth文件是xml文件,通过xml的方式存放和解析osgEarthDrivers/earth/ReaderWriterOsgEarth.cppvirtual ReadResult readNode(const std::string& fileName, const osgDB::Options* readOptions) const{ osg::ref_ptr<...
2019-09-20 06:32:25 652
原创 C++学习(五十九)获取文件的属性信息,比如最后修改时间
#include <sys/stat.h>TimeStamposgEarth::getLastModifiedTime(const std::string& path){ struct stat buf; if ( stat(path.c_str(), &buf) == 0 ) return buf.st_mtime; ...
2019-09-19 06:52:16 458
原创 osg学习(二十五)osg根据二进制数据判断图片类型的方法
主要根据二进制的前几个数据来判断osgEarth/ImageUtils.cpposgDB::ReaderWriter*ImageUtils::getReaderWriterForStream(std::istream& stream) { // Modified from https://oroboro.com/image-format-magic-bytes/ ...
2019-09-16 22:36:42 383
原创 osg学习(二十四)osg不同系统默认字体的加载路径
加载字体语句osg::ref_ptr<osgText::Font> g_font = osgText::readFontFile("fonts/arial.ttf");在不同系统中加载路径是不同的,针对WIN32、Apple、Linux等系统的路径设置为:osgText/Font.cpp#if defined(WIN32) osgDB::convertStri...
2019-09-16 06:55:16 713
原创 C++学习(五十八)V8引擎
V8使用C++开发,并在谷歌浏览器中使用。在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。V8中实现的ECMAS...
2019-09-15 18:37:43 821 1
原创 osg学习(二十三)osg读写插件的查找加载过程
osg在读写各种文件时,如模型文件(osga、ive)、earth文件及其中配置的高程/影像数据,需要通过相应的读写插件来执行,如何查找和加载相应的插件,osg有一套机制。最终返回一个ReaderWriter::ReadResult里面包含能够读取文件的对象(本质是一个类指针)。主要有以下四种查找和加载途径:1、从归档(压缩)读写器的扩展名列表中查找osgEarth/Registry....
2019-09-15 17:56:46 1454
原创 osg学习(二十二)osg读写插件的注册过程
读写插件包括高层、影像等文件的读写插件1、注册AnnotationLayerosgEarthAnnotation/AnnotationLayer.cppREGISTER_OSGEARTH_LAYER(annotations, AnnotationLayer);osgEarth/Layer#define REGISTER_OSGEARTH_LAYER(NAME,CLASS) ...
2019-09-14 22:36:23 1377
原创 osg学习(二十一)osg的BlockCount和Barrier
BlockCount的使用,和Block类似。阻塞线程,使用block函数。释放线程,使用release函数。但是比Block多出来的功能是,使用completed函数,表示阻塞线程的东西少了一个。当阻塞线程的东西为0时,被BlockCount阻塞的线程才开始运行。Barrier是线程栅栏类。这是一个对于线程同步颇为重要的阻塞器接口,它的构造函数与BlockCount 类似,可以设置一个整数值...
2019-09-11 21:42:04 437
原创 osg学习(二十)osg的线程同步
1、建立同步锁osgViewer/ViewBase.cppvoid ViewerBase::startThreading(){ _endDynamicDrawBlock = new osg::EndOfDynamicDrawBlock(numViewerDoubleBufferedRenderingOperation); _startRenderingBarrier = ...
2019-09-11 07:31:40 796
原创 osg学习(十九)osg的线程模型及其确定
在启动osg程序时会确定使用什么线程模型osgViewer/ViewBase.cppViewerBase::ThreadingModel ViewerBase::suggestBestThreadingModel(){ std::string str; if (osg::getEnvVar("OSG_THREADING", str)) { if...
2019-09-08 22:53:03 421
原创 osg学习(十八)osg的状态树与渲染树小结
1、osg除了场景树,还建立状态树和渲染树,主要是为了加速绘制,避免不必要的opengl状态频繁切换2、每个camera都会包含一个场景树(可能会和其它camera共用),并且在对camera进行渲染时,也会生成与该camera相对应的状态树和场景树。因此一个osg程序中,可能不止一个场景树、状态树、渲染树。...
2019-09-08 18:25:39 474
原创 osg学习(十七)camera的cull与draw执行位置的分配
主要与camera的render中的_graphicsThreadDoesCull有关,默认_graphicsThreadDoesCull为true1、如果_graphicsThreadDoesCull为true,则cull和draw都在窗体线程中执行osgViewer/Render.cppvoid Renderer::operator () (osg::GraphicsContext...
2019-09-08 18:15:36 1401
原创 osg学习(十六)osg的渲染树构建过程
1、osgUtil::SceneView生成渲染树根节点osgUtil/SceneView.cppvoid SceneView::setDefaults(unsigned int options){ _renderStage = new RenderStage; _cullVisitor->setStateGraph(_renderStage .get());...
2019-09-08 17:41:11 678
原创 osg学习(十五)osg的状态树构建过程
状态树中每一个节点包含一个状态集StateSet,如果一个场景树节点下有多个子节点有相同的状态集,那么这几个子节点将共用一个状态树节点。1、osgUtil::SceneView生成状态树根节点osgUtil/SceneView.cppvoid SceneView::setDefaults(unsigned int options){ _stateGraph = new Sta...
2019-09-07 07:55:00 621
原创 osg学习(十四)osg的场景图数据是如何赋给camera的
void View::assignSceneDataToCameras(){ osg::Node* sceneData = _scene.valid() ? _scene->getSceneData() : 0; _cameraManipulator->setNode(sceneData); if (sceneData) _camera->add...
2019-09-06 22:51:36 335
原创 osg学习(十三)osg的核心部件关系
osgViewer::Viewer osgViewer::Scene(负责存放场景图) osg::Camera osgViewer::Render osgUtil::SceneView osgUtil::StateGraph osgUtil::RenderStage...
2019-09-06 22:35:09 194
原创 osg学习(十二)谷歌开源Seurat工具加速VR渲染
Seurat开源,它是为开发者推出专门适用于优化移动VR内容的工具,它可以通过3D场景给处理为可在移动处理器上高校渲染的形式,目标是减少总体多边形数量,以降低处理任务量和资源消耗量。 此外,利用Seurat把RGBD图像作为输入,生成纹理网格,定位可配置数量的三角形,纹理大小和填充率,从而以传统方法所无法实现的方法来简化场景。这样就可以在性能上提升100倍左右,而且几乎没有视觉质量的损失,未来...
2019-09-01 18:09:18 404
原创 osg学习(十一)osg与osgre
OGRE和OSG本身被定位为一个纯粹的图形引擎。其中OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API)。OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。OGRE(Object-Oriente...
2019-09-01 17:30:57 1217
原创 C++学习(五十七)mental ray已死
最早属于Autodesk,后来卖给了NVIDIA现在NVIDIA要专注于AI和GPU加速,就停止mental ray的更新和销售所以,以后就不会再有mental ray了!!!
2019-09-01 07:58:31 272
osgAndroidExampleGLES2重新组织TestNativeCPlusPlus
2021-06-19
NVIDIA_Nsight_Tegra_Release_3.6.19217.7511.exe
2021-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人