- 博客(118)
- 资源 (2)
- 收藏
- 关注
原创 OSG3.4内置Examples解析【目录】
opengl渲染管线 从整体上解读OpenGL的渲染流程 一 从整体上解读OpenGL的渲染流程 二osg与animate相关示例解析 OSG3.4内置Examples(osganimate)解析 OSG3.4内置Examples(osganimationeasemotion)解析 OSG3.4内置Examples(osga...
2019-10-21 17:47:34
712
原创 探究osg中的程序设计模式【目录】
前序 探究osg中的程序设计模式---开篇探究osg中的程序设计模式---创造性模式 探究osg中的程序设计模式---创造型模式---Factory(工厂)模式 探究osg中的程序设计模式---创造型模式---AbstractFactory(抽象工厂)模式 探究osg中的程序设计模式---创造型模式---Singleton(单例)模式...
2019-04-25 15:31:55
511
1
原创 3wwang的2019计划
1、探究osg类生物----系列(35天)已完结 【置顶】探索未知种族之osg类生物【目录】www.3wwang.cn2、osg中的设计模式---系列(15天)已完结 【置顶】探究osg中的程序设计模式【目录】3、osgExamples讲解(挑出一部分用opengl实现)---系列(40天)创作中 【置顶】OSG3.4内置Example...
2019-04-08 16:08:41
452
原创 《探索未知种族之osg类生物》目录
精力有限,csdn不在更新《探索未知种族之osg类生物》。在这里列出所有文章目录(持续更新)有兴趣的同学可以看看。探索未知种族之osg类生物【目录】前序 探索未知种族之osg类生物---起源ViewBase::frame函数中的ViewerInit()及realize() 探索未知种族之osg类生物---器官初始化一 探索未知种族之osg类生物...
2019-03-25 16:04:19
267
原创 探索未知种族之osg类生物---渲染遍历之裁剪四
前言通过 CullVisitor 的使用,我们已经成功地构建了 OSG 系统的状态树和渲染树,并在这一过程中使用 isCulled 函数剔除了场景中对渲染没有助益的对象(在下一次遍历时,还会重新审核所有的节点,上一次被剔除的节点可能在新的循环中将被显示出来)。RenderStage::sort在上一节我们提到,在状态树和渲染树构建完毕之后,我们将依次执行RenderStage::so...
2019-03-21 14:44:47
317
原创 探索未知种族之osg类生物---渲染遍历之裁剪三
前言在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Switch& node), CullVisitor::apply(LOD& node),CullVisitor::apply(Geode& node),CullVisitor::...
2019-03-20 11:36:02
399
原创 探索未知种族之osg类生物---渲染遍历之裁剪二
前言上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分。所以今天我们来仔细的研究一下这一部分。sceneView::cull()函数核心部分1、cullVisitor->pushStateSet函数: A、_currentStateGraph = _currentStateGr...
2019-03-19 11:18:25
312
原创 探索未知种族之osg类生物---渲染遍历之裁剪一
前言上面我们用了四节课的内容,讲解了一些osg概念性的内部原理。希望大家可以再看今天的讲解之前先再仔细的研究一下前四节的内容。这样你就会对整个osg的渲染过程有一个更加清晰的认知,有助于理解下面两个函数cull()和draw()。osg::Util::SceneView::cull()好,相信大家已经又复习了上面几节的内容,那我们就进行sceneView的第一个重要功能osg::U...
2019-03-18 11:29:04
423
原创 探索未知种族之osg类生物---状态树与渲染树以及节点树之间的关系
节点树首先我们来看一个场景构建的实例,并通过它来了解一下“状态节点”StateGraph 和“渲染叶”RenderLeaf 所构成的状态树,“渲染台”RenderStage 和“渲染元”RenderBin 所构成的渲染树,进一步了解这两棵树之间错综复杂的关系,以及理解它们与场景节点树之间更加复杂的关系。上面是一个虚构的场景结构图,其中叶节点_geode3,以及所有六个几何对象均设置了关...
2019-03-18 11:26:25
421
原创 探索未知种族之osg类生物---渲染遍历之认识SceneView
前言我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构, a场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息; b组节点(osg::Group)及其派生出的各种特殊功能节点则作为场景树的各个枝节节点,它们也可以拥有不同的渲染状态; c整个场景的根节点(root)有且只有一个节点可以直接作为,使用...
2019-03-15 13:18:56
289
原创 探索未知种族之osg类生物---渲染遍历之器官协作
好了,现在我们经过三节的介绍我们已经大体上明确了单线程模型(SingleThreaded)下 OSG 渲染遍历的工作流程。事实上无论是场景的筛选render还是绘制cull工作,最后都要归结到场景视图(SceneView)的相应实现函数中去完成,渲染器类 Renderer只是一个更为方便和直观的公用接口而已。我们总结一下OSG 系统的场景图形,摄像机,图形设备,渲染器和场景视图的关系...
2019-03-14 10:11:37
213
原创 探索未知种族之osg类生物---渲染遍历之Renderer::draw()简介
我们今天进入上一节的遗留问题Renderer::draw()的探究。 1、从_drawQueue中取出其中一个sceneView对象。SceneView是对scene和view类的封装,通过他可以方便的访问到scene或者view中的成员,以及最主要的作用是封装了更新,挑选,和绘制遍历,但是并不启用DatabasePager。 2、sceneView->collateRefer...
2019-03-13 13:56:49
424
原创 探索未知种族之osg类生物--渲染遍历之GraphicsContext::runOperations
osg::GraphicsContext::runOperations()。我们先来看一下这个函数的执行过程。? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
2019-03-12 11:13:03
465
原创 探索未知种族之osg类生物---渲染遍历之Renderer简介
我们继续renderingTraversals()的探究。我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作。我们在renderingTraversals()中总是遇到这个Renderer类,我们就先补充一下他的介绍。osgViewer::Renderer类为摄像机渲染场景的工作提供了一个公有接口。通常是在Vie...
2019-03-11 14:16:12
501
原创 探索未知种族之osg类生物---呼吸分解之渲染遍历二
那么今天我们就正式进入osg整个呼吸动作之中最复杂的一个动作,ViewerBase::renderingTraversals(),我们先介绍renderingTraversals的开头的简单的几步操作。下一步就是进行cull操作。我们先休息一下,明天继续。 1、这个函数中先遍历了所有的view中的相机节点分别取得他们的位置Translation以及姿态Rotation,并保存到osg...
2019-03-11 11:19:31
285
原创 探索未知种族之osg类生物---呼吸分解之渲染遍历一
总结前面我们基本上已经完成对ViewerBase::frame()函数的探究,只剩下renderingTraversals()渲染遍历的探究,虽然就剩下了一个函数,但是这却是最重要的,不可少的一个步骤。他主要是完成对场景的筛选和绘制工作,以及很多线程的调度和同步工作也是在这个函数中完成的。前面的几天我们主要是讲解了完成三个主要的遍历函数,我们来总结一下。advance(simulati...
2019-03-11 11:18:49
292
原创 探索未知种族之osg类生物---呼吸分解之更新循环三
补充当然细心的你会发现,_scene->updateSceneGraph(*_updateVisitor)中还有一个imagePager::UpdateSceneGraph()还没有进行讲解,这是因为imagePager和DatabasePager是可以对比这理解的,这里imagePager的主要功能就是加载纹理图片文件。但是imagePager只是负责在另一个线程中加载图片,而没有da...
2019-03-08 12:41:39
252
原创 探索未知种族之osg类生物---呼吸分解之更新循环二
_scene->updateSceneGraph(*_updateVisitor);我们用了前面4节才刚刚算是完成对DatabasePager::DatabaseThread::run()函数的探究,也就是了解了osg究竟是怎么完成对数据的加载的。那么我们现在要回到DatabasePager::updateSceneGraph的工作中,它是在osgViewer::Viewer:: u...
2019-03-07 13:39:26
392
原创 osg探究补充:osg数据加载原理(插件机制简介)
前言我们接着昨天的继续,昨天主要是讲解了DatabasePager类中的特定的成员变量以及run函数的第一部分,对所要请求加载的数据按照是否是网络数据进行分类加载模式。今天我们就看看数据是怎们加载到osg环境中的。还是在DatabasePager::DatabaseThread::run()函数中,首先我们保证了databaseRequest是线程安全的,因为run()函数是创建一个唯...
2019-03-06 13:25:40
1267
原创 osg探究补充:DatabasePager类简介
简介DatabasePager类,也就是常说的数据库分页技术,简单来说,就是在进行数据库查找时,有可能满足条件的数据很多,为了提高相应速度我们进行数据查找时进行分页查找与显示,当点击下一页时才会进行下一次的查找动作。Osg就是把这个原理应用在了三维大场景中,当我们需要加载一个城市级数据时,因为数据量非常大,而我们感兴趣的范围在某一时刻一般都是很小的一部分,所以我们也可以应用数据分页的技术,对大...
2019-03-05 11:26:41
1029
原创 osg探究补充:Node::accept(NodeVisitor& nv)及NodeVisitor简介
前言在前几节中,我自己觉得讲的比较粗糙,因为实在是时间上不是很充足,今天我想弥补一下,希望不是亡羊补牢。我们在osgViewer::Viewer::eventTraversal()函数中经常看到这么两个函数:camera->accept(*_eventVisitor);以及getSceneData()->accept(*_eventVisitor);今天我们第一步就是要介绍一下这两...
2019-03-04 14:24:07
1194
原创 探索未知种族之osg类生物---呼吸分解之更新循环一
上节总结前几天我们大体上介绍完成了osg的事件循环的介绍,总结一下osg的时间循环主要就是得到平台(windows)的所有消息,并遍历所有的node的eventCallback,并对他们进行处理。接下来我们就要进入osg的另一个维持生命的循环---更新循环。更新循环OSG 更新循环的作用与事件回调有类似之处:由专门的访问器对象_updateVisitor 的负 责场景图形更新遍历;...
2019-03-04 11:32:46
297
原创 探索未知种族之osg类生物---呼吸分解之事件循环三
那我们就开始处理这些事件中得到的所有的交互事件,首先我们要判断这些事件是否包含osg的退出事件,那什么情况下会触发这个退出事件呢?如果您运行过osg中example中的小例子的,聪明的你一定就会发现当按下esc时就会退出osg。所以osg中默认的退出事件就是由esc触发的。当然我们也可以通过ViewerBase::setQuitEventSetsDone 设置是否允许按下某个键之后直接退出这种...
2019-03-02 22:51:37
255
原创 探索未知种族之osg类生物---呼吸分解之事件循环二
VPM矩阵1、V 表示摄像机的观察矩阵(View Matrix),它的作用是把对象从世界坐标系变换到摄像机坐标系。因此,对于世界坐标系下的坐标值 worldCoord(x0, y0, z0),如果希望使用观察矩阵 VM 将其变换为摄像机相对坐标系下的坐标值 localCoord(x’, y’, z’),则有:localCoord = worldCoord * VM此外,观察矩阵可以...
2019-03-01 12:37:04
1482
原创 探索未知种族之osg类生物---呼吸分解之事件循环一
事件循环和更新循环终于到了我们嘴里经常念叨的事件循环、更新循环以及渲染循环了。首先我们来区分一下事件循环和渲染循环,他们两个首先是两个不同顺序执行的过程,我们有时候会用到任意node的updateCallback函数,这个就是在更新循环的时候遍历所有的node来调用updateCallback函数的;而事件循环是与用户操作和操作系统事件想关联的,以及调用我们设置的事件回调(EventCal...
2019-02-28 17:26:04
1572
原创 探索未知种族之osg类生物---呼吸分解之advance
回顾我们用了两节的内容才堪堪讲解完ViewerBase::frame()函数中调用的realize()---Viewer:: realize()函数。我们简单的总结就是Viewer:: realize()主要是使GraphicsContext处于可用状态,并且启动相关的图形线程。ViewerBase::frame()函数解读到这里,我们完成了osg生物第一次尝试呼吸所需要的所有器官的初...
2019-02-27 16:05:35
245
原创 探索未知种族之osg类生物---器官初始化四
上一节我们对完成了对osg生物内部非常重要器官graphicsContext的初始化工作。这样就可保证我们场景中至少有一个graphicContext存在,不至于刚出生就面临夭折。我们根据上一节中osg代码的研究也就知道了,在我们正常使用osg时,是怎么完成对camera以及graphicContext的创建的了。回到Viewer::realize()中我们继续向下看,现在我们对osg...
2019-02-26 12:36:51
399
原创 探索未知种族之osg类生物---器官初始化三
当判断到viewer中没有一个graphicContext可用时,osg就会默认的进行一次对viewer的实现操作,这样可以保证osg以后可以安心的在屏幕上进行作画。那我们就来看看这个osgViewer::Viewer::realize()函数到底具备什么样神奇的功能。osgViewer::Viewer::realize()osgViewer::Viewer::realize()的最要...
2019-02-25 13:25:50
247
原创 探索未知种族之osg类生物---器官初始化二
那我们回到ViewerBase::frame函数中来,继续看看为什么osg生命刚刚出生的时候会大哭,除了初始化了eventQuene和cameraManipulator之外还对那些器官进行了初始化。在这之前我们先介绍一下上一节说到的osg的肢体或者器官但是没有展开介绍的。前言osgGA::GUIEventAdapter,GUI事件适配器。它就是对所有平台windows linux ma...
2019-02-24 15:08:45
245
原创 探索未知种族之osg类生物---器官初始化一
我们把ViewerBase::frame()比作osg这类生物的肺,首先我们先来大概的看一下‘肺’长什么样子,有哪几部分组成。在这之前得对一些固定的零件进行说明,例如_done代表osg的viewer是否被删除释放内存;_firstFrame代表是否是第一次进入frame函数。那么接下来我们会发现frame函数表面上组成结构非常简单,逻辑上也非常的清晰---先判断当前的viewer是否被删除,...
2019-02-23 17:43:15
254
原创 探索未知种族之osg类生物---起源
任何程序都是有生命的,是生命就需要呼吸。例如普通的windows程序,当运行完main()函数后,就需要进入消息循环,来监听用户的各种操作,以便做出及时的回应。这样的每次循环就像生命的每次呼吸,来维持生命体征。osg的程序不仅仅需要消息循环来监听用户的鼠标、键盘等操作,同时也得具备...
2019-02-22 13:29:49
293
原创 Introduction to 3D Game Programming with DirectX 11 翻译 --- 开篇
Direct3D 11简介Direct3D 11是一个渲染库,用于在Windows平台上使用现代图形硬件编写高性能3D图形应用程序。Direct3D是一个windows底层库,因为它的应用程序编程接口(API)可以很好地非常接近于它控制的底层图形硬件。她最主要的客户是游戏行业,游戏需要建立在Direct3D上的更高级的渲染引擎来实现。但是,其他行业也需要高性能的交互式3D图形,例如医学和科学可...
2019-02-21 13:31:44
2524
1
原创 windows netcdf vs 配置
程序中添加的头文件是netcdfcpp.h文件 **************************************************************************************************使用的netcdf的c++接口版本是netcdf-cxx4-4.2.tar.gz,下载地址:http://www.unidata.ucar.ed
2017-06-14 18:02:12
1566
1
原创 mac/linux 修改vim显示信息
转自:http://www.cnblogs.com/yjmyzz/p/4019783.html 步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下 注:redhat 改成 cp /etc/vimrc ~/.vimrc步骤2: vi ~/.vimrc 进入insert模式,在最后加二行 sy
2017-06-14 18:02:08
628
原创 java1.8 版本改成 java1.7版本
以前先安装的java1.7 大部分程序应该都是只支持1.7 不支持1.8 但是因为要跑一个别人的项目 要求是java1.8 所以想在电脑上同时装1.7和1.8到官网上下载1.8 安装安装完成后 并没有配置环境变量 但是发现Java -version变成1.8了要默认是1.7的话需要做如下操作:1.环境变量—系统变量—Path中应该存在C:\ProgramData\Oracl...
2017-06-14 18:02:04
2973
原创 gdal source code c++ make windows
下载源码GDAL源代码下载地址:http://trac.osgeo.org/gdal/wiki/DownloadSource,或者安装svn从源代码服务器下载,svn地址是:http://svn.osgeo.org/gdal/trunk。编译前在编译开始之前,还需要打开nmake.opt文件,找到131行处的“#WIN64=YES”,将前面的“#”去掉,保存,然后开始编译。如果就这样编
2017-06-14 18:02:00
265
原创 libjpeg安装和使用
转自: http://blog.youkuaiyun.com/ice__snow/article/details/52563944 ,有几处做了一部分修改一、 编译下载地址 http://www.ijg.org/1、下载并解压,放在一个好找的目录就行:2、进入jpeg-9b,找到jconfig.vc,复制并改名为jconfig.h,否则会产生无法生成jconfig的警告3、找...
2017-06-14 18:01:56
26096
6
原创 window 安装gdal和python
进入 http://www.gisinternals.com/release.php 中下载下图(也可以不是这个版本但是下载的python和gdal一定要版本对应) 1、点击下图中release-1700-x64-gdal-2-1-2-mapserver-7-0-22、下载python3.4 https://www.python.org/downloads/release/py...
2017-06-14 18:01:52
3807
原创 gdal和python在windows上的安装
GDAL is a useful command line tool to process spatial data, if you haven’t heard of the tool before some examples of what it can do are: Create contours from a DEM Create a TMS tile structure Ra...
2017-06-14 18:01:49
5934
基于改进八叉树与分层渲染的海量激光点云可视化技术
2018-07-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人