osg专题

OSG学习:LOD、数据分页、动态调度

LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。在OSG的场景结点组织结构中,专门提供了场景结点osg::LOD来表达不同的细节层次模型。其中,osg::LOD结点作为父节点,每个子节点作为一个细节层次,设置不同的视域,在不同的视域下显示相应的子节点。 数据分页:在城市

OSG学习:阴影代码示例

效果图: 代码示例: #include <osgViewer/Viewer>#include <osg/Node>#include <osg/Geode>#include <osg/Group>#include <osg/Camera>#include <osg/ShapeDrawable>#include <osg/ComputeBoundsVisitor>#include

OSG数学基础:坐标系变换

三维实体对象需要经过一系列的坐标变换才能正确、真实地显示在屏幕上。在一个场景中,当读者对场景中的物体进行各种变换及相关操作时,坐标系变换是非常频繁的。坐标系变换通常包括:世界坐标系-物体坐标系变换、物体坐标系-世界坐标系变换和世界坐标系-屏幕坐标系变换(一个二维平面坐标系,即显示器平面,是非常标准的笛卡尔坐标系的第一象限区域)。 世界坐标系-物体坐标系变换 它描述的问题主要是关于物体本身的

OSG数学基础:坐标系统

坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的。三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系。常用的坐标系:世界坐标系、物体坐标系和摄像机坐标系。 世界坐标系 世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架。从另一方面说,能够用世界坐标系来描述其他坐标系的位置,而不能用更大的、外部的坐标系来描述世界坐标系。世界坐标系也被广泛地

osg::Vec2 Vec3 Vec4

osg::Vec2可以用于保存2D纹理坐标。 osg::Vec3是一个三维浮点数数组。 osg::Vec4用于保存颜色数据。

OSG学习:转动的小汽车示例

由于只是简单的示例,所以小汽车的模型也比较简单,是由简单的几何体组成。 代码如下: #include <osg\ShapeDrawable>#include <osg\AnimationPath>#include <osg\MatrixTransform>#include<osgDB\ReadFile>#include<osgViewer\Viewer>osg::MatrixTr

OSG学习:使用已有回调示例

回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情。这个函数就叫做回调函数。 #include<osg\MatrixTransform>#include<osg\PositionAttitudeTransform>#include<osg\Geode>#

osg节点拾取

欢迎关注公众号可以查看更多完整文章 使用Scribe特效实现白色轮廓,此类在osgFx模块里面。 所有场景中的节点全部添加Scribe特效。 通过继承GUIEventHandler来自定义鼠标对应动作时,需要进行何种操作。 在事件处理器类中,实现左键时判断鼠标点击位置是否和节点相交,然后隐藏特效; 右键时恢复特效。 判断是否相

osg自定义场景物体和设置状态集

欢迎关注公众号可以查看更多完整文章 osg自定义场景物体,也就是模型,主要是通过设置顶点数据、顶点颜色数据、顶点索引集、法线数据集合等数据才能看到模型。 自定义模型需要使用Geometry来接收设置的数据,Geometry类提供了接收上述各种数据的接口。 如果想给状态集StateSet设置某些属性,可以通过接口setAttributeAnd

osg控制节点的显示与否

欢迎关注公众号可以查看更多完整文章 使物体或者说Node隐藏方式有两种,一种是设置NodeMask,另外一种是使用osg的switch类来控制。 两者的区别是 前者只是看不到,数据还在场景中,隐藏了并不能影响渲染性能,不影响内存中的数据; 后者是从内存中暂时移除,会对性能有所影响,需要显示时再加载进场景。 回调的速度好像是每帧调用一

osg隐藏物体或者Node(多个物体轮流显示)

欢迎关注公众号可以查看更多完整文章  对于OSG源码的下载、编译我就不说明了,网上的例子很多。 使物体或者说Node隐藏方式有两种,一种是设置NodeMask,另外一种是使用osg的switch类来控制。 两者的区别是 前者只是看不到,数据还在场景中,隐藏了并不能影响渲染性能,不影响内存中的数据; 后者是从内存中暂时移除,会对性能有所影

OSG学习笔记0——解决OSG读obj模型问题

</pre><p></p><p></p><p></p><pre name="code" class="cpp">// ReadObj.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<osgViewer/Viewer> #include<osgDB/ReadFile> int main(int argc, char **argv){os

OSG学习笔记16 - 对点选物体平移(鼠标点选物体)(物体随鼠标移动)(屏幕坐标转世界坐标)

之前的一篇博文是有一篇对点选物体进行平移、缩放旋转。那一篇是很简单的调用了OSG中定义的一些dragger,但这些dragger都有坐标轴或者tapbox等在模型上,与我最近要做的事情的需求不同。网上也找了好久,最终还是自己一点一点,参考老师之前写的代码,然后在亲爱的童童师兄的帮助下,实现了这么一个小小的功能。虽然代码写的乱糟糟的。 这里就简单记录一下整个思路吧。 1、构造一个事件处理器,也就

OSG学习笔记15-OSG中对事件的处理

看了王锐大大的书,我感觉OSG中对事件的处理主要是由以下几块组成的: 1、事件适配器 GUIEventAdapter 这个类是作为系统交互事件和OSG交互事件的适配接口。这一句话还不是很理解。 源码文档里对于这个类的定义是:事件类,存储键盘、鼠标和窗口事件。 公有类型包括: (这些类型都是枚举类型,每个类型中有若干整形常量) MouseButtonMask EventType :O

OSG学习笔记14-快速构建视图的窗口设备(OSG程序在窗口中显示)

讲道理,像我这么蠢的人真的不多了。想同时运行一个模拟触摸板的模拟器程序,还有自己的OSG程序,脑子都纠结破了,又是想用Qt,又是想照着书上的代码,创建窗口,拿着书,跑去问实验室C++小王子,到底应该把绘制模型语句加上。小王子答:为什么要这么复杂,在窗口中显示OSG程序,不是一句话的事情吗。OMG!我表示不相信。 后来一想,我为什么从来没有考虑过,OSG程序,是怎么将所绘制的图形显示出来的,还不是

OSG编程指南<二十三>:基于OSG+ImGui制作模型编辑器,实现三轴方向的实时平移、旋转和缩放变化

1、概述   在OSG的开发应用过程中,我们有时候总会纠结于使用MFC还是Qt来嵌入OSG窗口以便于后续的功能开发,毕竟选择一个合适的UI框架,对于后续的开发还是省去很多麻烦的。但对于初学者来说,可能对框架消息机制的不熟悉,尤其是在做一些与场景互动的交互操作时候,耗费了大量时间在与OSG场景交互的实现上。如果有在使用osgearth库的开发者可能会发现源码带的示例中有osgearth_imgui

各种计算机图形相关库(CGAL、VTK、OSG、OpenInventor、ITK)

(1)CGAL,Computational Geometry Algorithms Library,计算几何算法库,设计目标是,以C++库的形式,提供方便,高效,可靠的几何算法。CGAL可用于各种需要几何计算的领域,如计算机图形学,科学可视化,计算机辅助设计和建模,地理信息系统,分子生物学,医学成像,机器人运动规划,网格生成,数值方法等等。 计算几何算法库(CGAL),提供计算几何相

用NDK构建osg库到Android 平台几点经验

转自 http://blog.csdn.net/giantchen547792075/article/details/17660511 在pc端osg已经证明了他的实力了,大量的扩展项目、严格的跨平台。在移动端目前还没有一个很好的3D开源框架可以使用,开发者需要从0开始写很费事,构建这样一个平台也非一日之功,将其编译到移动平台则来的简单了。一下是在几日来构建过程中遇到的一些问题,比较频繁的,

Qt 集成OSG

Qt 你好 | 专注于Qt的技术分享平台 一,新建一个 QOsgWidget 类,继承自osgQOpenGLWidget #ifndef QOSGWIDGET_H#define QOSGWIDGET_H#include <QObject>#include <osgViewer/Viewer>#include <osgQOpenGL/osgQOpenGLWidget>class QOsg

osg渲染过程

目录 1、渲染最简单代码 2、详解run方法 3、详细过程 4、回调函数 5、Node Visitor 1、渲染最简单代码 2、详解run方法 3、详细过程 3.1 advance()方法 进行帧计数 3.2 eventTraversal() eventTraversal()响应用户操作,eventTraversal()遍历的是事件队列,而不 是场景图;而且

ubuntu下安装三维渲染引擎OSG详解

零、前言 OpenSceneGraph是一个开源的、跨平台的三维引擎,被广泛的应用在可视化仿真、游戏、虚拟现实、三维重建等领域,采用标准C++和OpenGL编写而成,能够更加快速、便捷地创建高性能、跨平台的交互式图形程序,在OpenGL上的面向对象的框架,把开发者从实现和优化底层图形的调用中解脱出来,它为图形应用程序的快速开发提供很多附加的实用工具。 一、下载OSG库并解压 1、OSG下载

OSG鼠标选择求交

OSG鼠标选择求交 求交方法一:(用WINDOW坐标值,在相机下求交)            //osg::ref_ptr< osgUtil::LineSegmentIntersector > picker = new osgUtil::LineSegmentIntersector(            //  osgUtil::Intersector::WINDOW, ea.getX()

OSG中获取视点的世界坐标

OSG中获取视点的世界坐标: (1)osg::Vec3 vPosEye, vCenter, vUp;      cameraMaster->getViewMatrixAsLookAt( vPosEye, vCenter, vUp);//获取世界坐标系下的视点值 (2)//主相机            osg::ref_ptr<osg::Camera> cameraMaster = vi

OSG中的HUD实时显示视点坐标

/*OSG中的HUD实时显示视点坐标*/ #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Geode> #include <osg/Depth> #include <osg/CameraNode> #include <osgText/Text> #include <o

OSG的HUD抬头文字显示

1.       HUD流程图: 完整源代码如下: /*OSG中的HUD,文字总是显示在最前面*/ #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Geode> #include <osg/Depth> #include <osg/CameraNode> #includ

OSG显示图片的几种方法???????????????????????

方法一:没有几何体,直接显示图片(见王锐、钱学雷的《OSG三维渲染引擎设计与实践》P119 在场景中绘制位图): osfg::ref_ptr<osg::DrawPixels> bmp= new osg::DrawPixels; bmp->setPosition( osg::Vec3( 0.0, 0.0, 0.0)); bmp->setImage( osgDB::readImageFile("***