- 博客(31)
- 资源 (47)
- 收藏
- 关注
原创 osg漫游器
在三维中常见的就是漫游整个场景,所谓漫游就是:观察者的视线从一个位置移动到另外一个位置或者在希望的方向上移动。在OSG中漫游可以通过改变观察者(相机)的位置和姿态来实现。三维世界中的模型的相对位置和形态不会发生变化,只是观察者的角度和位置发生了变化。常见的漫游器设计是不会考虑观察者的物理变化的,只会观察视觉运动的正确性,使观察者平滑的移动到指定的位置和姿态。设计漫游器的过程就是设置合适的相机...
2019-03-24 13:07:10 1875
原创 OSG在QT的中显示之二
利用QT在界面显示OSG模型,之前写过一篇文章OSG在QT的中显示,现在更新一下。#include <QtWidgets/QMainWindow>#include "ui_QtGuiOSG.h"#include "osgInc.h"class QtGuiOSG : public QMainWindow { Q_OBJECTpublic: QtGuiOSG(QWid...
2019-03-23 16:09:14 2891 4
原创 osg键盘消息处理
osg中主要使用osgGA库来处理用户的交互动作的,通常使用GUIEventAdapter类作为系统交互事件和OSG交互事件的适配接口。通过一个示例,通过键盘来控制模型的显隐:#pragma once#include "osgInc.h"class KeyboardHandler : public osgGA::GUIEventHandler {public: KeyboardHan...
2019-03-23 09:09:50 627
原创 osg使用多视景展示多个视图
先看效果:代码就比较简单了:void createMulitViewer() { osg::ref_ptr<osgViewer::Viewer> viewer1 = new osgViewer::Viewer; viewer1->setUpViewInWindow(0, 50, 320, 240); viewer1->addEventHandler(new os...
2019-03-22 08:51:35 1434
原创 osg图形设备接口和视景器
在Camera的类成员函数中,setGraphicsContext()这个函数的主要工作就是设置相机对应图形设备对象。GraphicsContext就是图形设备设备对象的载体,是任意图形子系统的抽象层接口,它提供了统一的图形设备操作函数,用于实现渲染结果和底层设备的交互,具有平台无关性。图形设备对象的主要工作就是提供场景渲染结果的载体。这个载体可以显示缓存,进而绘制到一个图形窗口中。Grap...
2019-03-21 15:52:48 771
原创 osg场景坐标
osg三维世界中,会使用到几个不同的坐标系统,下面会讲解几个常用概念,通过使用照相机拍照的过程进行类比:一、模型视点变换这个过程就相当于我们拍照时调整被拍摄物体的位置和姿态以及调整相机的位置和姿态。物体的位置和姿态成为模型变换;相机的位置和姿态称为视点变换,这两种变换在一起统称为模型视点变换。相机的位置和姿态又三个参数来决定:视点位置eye、参考点位置center和视点向上位置up。在拍摄...
2019-03-20 20:35:59 1656
原创 osg 雾效果
osg具有雾效果,也是非常简单可以实现的。先看一下效果:设置回调函数:#pragma once#include <osg/StateSet>class FogCallBack : public osg::StateSet::Callback {public: FogCallBack(); ~FogCallBack(); virtual void operator(...
2019-03-20 16:33:35 1351
原创 osg字体显示-居中显示
先看示例图:void createText3() { osg::ref_ptr<osg::Group> root = new osg::Group; osg::ref_ptr<osg::Node> cowNode = osgDB::readNodeFile("cow.osgt"); //获取节点包围盒 osg::ComputeBoundsVisitor bou...
2019-03-20 12:45:43 594
原创 osg字体显示
osg中字体一般都是通过的Text来实现的,继承自TextBase设置字体并且和屏幕平行显示;void createText2() { osg::ref_ptr<osg::Group> root = new osg::Group; osg::ref_ptr<osg::Node> cowNode = osgDB::readNodeFile("cow.osgt")...
2019-03-20 11:15:04 1073
原创 读《知识的错觉》有感
这本书替出了一些关于人们认知的新的观点,人们自认为很懂的知识也许并不是很了解。只是知道其中一些表面的东西。测量人们对某一知识是否了解的一项测试:1.你对拉链的工作原理是否了解,评分是1到7,7分是最了解,1分不是不了解。2.请写出拉链的工作原理,越详细,越好。3.请再次评分,你是否了解拉链的工作原理。通过这种类似的测试,可以测试一下人们是否真的对某类知识是否了解。人们做出任何一项决定都...
2019-03-19 23:00:39 430
原创 osg显示图片
osg读取文件图片使用的类是:DrawPixels原始图片:裁剪之后运行效果:运行代码:void createImage() { osg::ref_ptr<osg::Group> root = new osg::Group; osg::ref_ptr<osg::Geode> geode = new osg::Geode; osg::ref_ptr<...
2019-03-14 14:03:53 2745 2
原创 osg绘制回调
上一篇文章讲解了如何绘制一个几何图形,那么在绘制的时候如何控制绘制的过程呢?还是使用到了回调osg::Drawable::UpdateCallback定义回调类:#pragma once#include <osg/Drawable>class GeoCallBack : public osg::Drawable::UpdateCallback {public: Geo...
2019-03-14 13:33:41 729
原创 osg基本绘制-线
osg绘制图形需要定义最基本的顶点坐标数组。绘制几何图形需要osg::Geometry这个类,他就是负责几何体的绘制。void create4Geo() { osg::ref_ptr<osg::Group> root = new osg::Group; osg::ref_ptr<osg::Geode> geode = new osg::Geode; root-&...
2019-03-14 11:36:42 8310 6
原创 osg细节层次节点
osg中LOD细节层次节点,在不影响场景渲染结果的情况下,更具场景和观察者的距离,从多个预置方案中选择一个更为加单的方式显示,从而减少场景绘制的负担。也就是说:可以设置不同的节点,在场景中距离远近的显示效果,在距离比较远的时候,就显示面数比较少的模型或者隐藏模型。在距离比较近的时候显示的比较全或者显示面数比较多的模型。先看显示效果:void createLOD() { osg::ref_...
2019-03-13 18:45:00 899 1
原创 osg开关节点
osg中控制节点显隐的节点Switch。利用上一篇文章中的回调过程,实现节点的动态显示与隐藏。先看效果:定义回调对象:#pragma once#include "osgInc.h"class SwitchCallBack :public osg::NodeCallback {public: SwitchCallBack(); ~SwitchCallBack(); virtu...
2019-03-13 16:47:47 474
原创 osg设置回调接口
osg的回调有两种回调方式:更新回调和人机交互事件回调。前者是在场景渲染每一帧的时候调用,后者是由用户交互事件触发。osg更新回调继承类osg::NodeCallback,是通过回调可以控制每帧运行过程中的行为。通过函数void addCullCallback (NodeCallback *nc)设置回调对象。通过回调实现一个动画效果:定义回调函数:#pragma once#i...
2019-03-13 15:36:40 704
原创 osg节点访问器
定义好三维的节点场景之后,有时会需要访问其中的节点,包括从头至尾的访问,或者从先向上的访问,这样就需要一个访问器。osg::NodeVisitor就是这样的一个访问器。它遍历场景节点有几种方式:TRAVERSE_NONE - 仅访问当前节点,不继续遍历TRAVERSE_PARENTS - 向父节点推进TRAVERSE_ALL_CHILDREN - 向子节点推进函数: void tra...
2019-03-12 23:35:06 886
原创 osg节点说明
osg中数据组织是以树形结构组成的,看一下下面类图:osg::Geode和osg::Group节点都是继承自osg::Node。Geode是叶节点,也就是不会再有子节点。叶节点的工作主要是保存可绘制物体。管理的节点都是继承自Drawable这个类,有一个或者多个Drawable对象。Group组节点最为根节点或者其他节点。管理者众多其他的节点。常用的节点总结:空间变换节点:它可以改变...
2019-03-12 19:11:00 1979
原创 osg节点的包围球
osg数据组织方式采用的是树形节点的组织方式,每个节点都由相应的包围球。void createBound() { osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer; viewer->addEventHandler(new osgViewer::WindowSizeHandler()); osg:...
2019-03-11 23:16:05 1742
原创 OSG 绘制一个圆
OSG绘制一个圆,采用的是多个线段收尾连接在一起的办法。查看源码:void createClock() { //设置线宽 osg::ref_ptr<osg::LineWidth> lineSize = new osg::LineWidth; lineSize->setWidth(4.0); //获取根节点 osg::ref_ptr<osg::Group&g...
2019-03-11 19:21:49 5649
原创 C++中虚函数的使用
C++中重要的特性:封装、继承和多态。其中多态体现在多个类之间的关系上,也是设计模式中常用的一种特性。多态和继承联系在一起,子类继承父类的行为同时会改变父类的行为。在这其中虚函数起了重要的作用。虚函数一般使用在什么情况下呢?如果我们只关注程序本省的行为,同时没有继承关系,那么函数是否为虚函数根本无关紧要。只用在考虑到继承时才有必要考虑这些问题。也并不是所有的类都是为了继承而设计的。虚函数...
2019-03-10 21:02:56 229
原创 OSG粒子效果-雪
osg可以实现各种各样角复杂的粒子效果,下面实现一个比较简单的下雪的效果:void createSnow() { osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(osgDB::readNodeFile("cow.osg")); //设置雪花类 osg::ref_ptr<osgP...
2019-03-10 12:23:10 1485 1
原创 QT+OpenGL绘制
QT中已经集成了OpenGL的功能,下面利用OpenGL来实现第一个三角形的绘制。先看效果:#pragma once#include <QOpenGLWidget>#include <QOpenGLFunctions>#include <QOpenGLShaderProgram>class BBBOpenGLWgt : public QOpen...
2019-03-08 15:30:48 2340
原创 读《从一到无穷大》之后感
大家也许会觉得科学是比较枯燥的,理论性的东西比较多。如果单单给你一本关于这方面的书籍,除非是对相关方面的科学知识有所了解,否则一般人是继续难读下去的。之前我也是这样认为的,但是读完俄国科学家乔治.伽莫夫的著作《从一到无穷大》之后,发现科学也可以这样有趣。这本书不单单告诉你一些基本的科学理论知识,更是把这些知识融入有趣的比喻和生动的语言中。让你看完之后,还想再看一遍。这本书适合于具有初中文化水平...
2019-03-07 23:34:06 518
原创 QGraphicsView移动图元/场景以及坐标转换
使用Qt来画图的时候,需要了解一下QGraphicsView(视图)、QGraphicsScene(场景)、QGraphicsItem(图元),已经他们之间的关系。通过把各种 图元(基类都是:QGraphicsItem)组合在一起搭建成场景(QGraphicsScene),把搭建好的场景通过视图展示出来(QGraphicsView)。通过一个示例来展示,选中图元的时候可以移动图元,选中空白的时...
2019-03-06 17:56:06 18552 7
原创 QGraphicsView居中显示图元
QGraphicsScene:图形场景,主要用来添加各种图元,保存数据;QGraphicsView:用来显示场景中的数据;QGraphicsItem:各种图元的基类,在此基础上可以派生不同图元类型。首先定义场景和View; QGraphicsScene* _graphicsSence; QGraphicsView* _graphicsView;搭建一个简单的场景并且显示出来:voi...
2019-03-05 23:21:26 5363
原创 QCustomPlot的使用之四-响应鼠标移动和弹起事件
在项目中使用QCustomPlot过程中,会有新的需求需要满足,比如在显示的数据表格中,鼠标移动到数据线上的时候,需要实时显示当前显示的线上点的具体数据;点击这条线的时候,弹出对话框展现出数据线段的详细信息。解决思路:在不改变QCustomPlot的前提下,在其外层封装一层类,使其外层实现相应的功能。需要到的类图继续关系图:先看实现的效果:首先要找到QCustomPlot的相应的鼠标信...
2019-03-04 19:02:47 7603 13
原创 osgEarth显示地球影像
osgEarth是在OSG基础上的显示三维地球的,因为是基于OSGEarth的,所以在使用方式上和OSG是相似的,osgEarth显示的地球影像是通过earth文件来配置的,earth本质上是一个xml文件,配置了地球的投影方式和加载的数据。看一个最基本的earth配置文件。<map name="MyMap" type="geocentric" version="2"> <i...
2019-03-04 11:11:40 3727 2
原创 OSG鼠标点选模型二
上一篇文章中说了,如果使用鼠标点选隐藏模型。当时如果是同一个模型经过缩放或者平移后再次显示出来,也就是就在了一份模型但是通过平移显示出两个模型,点击其中一个模型时候回怎么样?是隐藏当前模型还是隐藏所有同类模型?创建一个这样的场景:void mousePick2() { osg::ref_ptr&lt;osgViewer::Viewer&gt; viewer = new osgViewer:...
2019-03-03 21:43:01 1168
原创 OSG鼠标点选模型
OSG鼠标点选模型,选中的模型消失:1.模型路径1.创建两个模型,并且把这两个模型放到Group中,并且注册鼠标点击事件处理void mousePick2() { osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); viewer->addEventHandler(new osgViewer...
2019-03-01 17:28:53 3360
原创 OSG节点位置变化
OSG中改变模型的位置、姿态或者比例,常用的类有两个:osg::PositionAttitudeTransformosg::MatrixTransform展示效果:代码示例:void mousePick() { osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); viewer->...
2019-03-01 11:04:47 1277 1
ICEGUI.rar
2020-08-03
QtGuiProductConsume.zip
2021-10-10
QtInterface.zip
2021-09-18
TimePlan.zip
2021-04-16
Tetris.zip
2021-02-06
IceServerClient.rar
2020-11-18
build_step_self.rar
2020-09-24
MoveChildWgt.rar
2020-09-22
IceApplication.rar
2020-07-27
Thread.zip
2020-07-21
GraphTraversal.zip
2020-01-14
QtGuiMaze.zip
2020-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人