osg
lainegates
think more, code less.
展开
-
创建 osg manipulator 的关键
osg::cameraManipulator 提供了最基本的camera修改方法,而osg::standardManipulator 比较完整得提供了各种设备函数接口操作camera 核心只是getMatrix() 和 getInverseMatrix() ,系统会自动调用这两个函数来操作camera , 其他是只是如何修改相应的参数原创 2012-05-17 12:15:58 · 3113 阅读 · 1 评论 -
win10下C++ IDE 异常崩溃
这两天编译之前写的一个项目,在win7上编译好好的,但在win10下debug时会有各种神一样的不定期出现的bug。最神奇的莫过于某些情况下C++IDE会随着程序一起崩溃,只要IDE一崩溃,电脑就像死了机,好久才能恢复。当时的心情况真是万匹野马奔腾而过,而且是往复的。 我开始以为是使用第三库的问题,我用两个库,分别是QT和OSG。于是我去掉OSG,发现没有bug了,于是确定问题在OSG上。我换了O原创 2016-12-22 09:06:02 · 2194 阅读 · 0 评论 -
OSG中的HUD
OSG中的HUD所谓HUD节点,说白了就是无论三维场景中的内容怎么改变,它都能在屏幕上固定位置显示的节点。 实现要点: 1.关闭光照,不受场景光照影响,所有内容以同一亮度显示 2.关闭深度测试 3.调整渲染顺序,使它的内容最后绘制 4.设定参考贴为绝对型:setReferenceFrame(osg::Transform:ABSOLUTE_RF) 5.使其不受父节点变换的影响:setMatr转载 2016-11-18 19:23:18 · 1825 阅读 · 0 评论 -
OSG里面设置反走样 (抗锯齿)
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; traits->windowDecoration = false; traits->x = x; traits->y = y; traits->width = w; traits-原创 2016-11-18 13:39:20 · 5845 阅读 · 0 评论 -
win10+vs2015编译osg 3.4.0
最近发现之前写的软件里有点问题,字体显示不正确,解决了半天,不成功。于是只得重新编译代码了,这个软件使用了osg。 上次编译还是两年前,用的vs2010,现在已经到vs2015了,我上网一查,vs2015能编译osg,于是我就装了vs2015,准备工作了。 结果上OSG官网一看,没有vs2015编译好的,但有vs2013的,又在网上搜了一圈,还是没有现成的,于是我有点蒙圈了,vs装上基本卸不原创 2016-11-17 14:36:28 · 4375 阅读 · 4 评论 -
Mac下编译 OSG ( OpenSceneGraph )
最近要用到OpenSceneGraph得编译它,但MacOS使用开源软件确实比linux和windows麻烦。第一轮,修改portfile我使用MacPorts管理软件,能正常安装OSG,而且是最新版本,但默认没有编译osgQt,我研究很久,才发现可能通过修改portfile实现sudo port edit OpenSceneGraph # 打开OSG配置文件在最后几行找原创 2015-05-29 22:10:23 · 4595 阅读 · 2 评论 -
osg 半透明遮挡实现
今天需要实现一个osg半透明遮挡场景,在网上查了好多帖子,都不好用,不是遮挡不对,就是所有物体全透明了。最后终于在google找到一篇英文帖子,解决了问题。具体实现半透明效果的代码如下:osg::MatrixTransform* createDoor3(){ osg::ref_ptr doorShape = new osg::ShapeDrawable( new原创 2013-11-14 12:17:32 · 6294 阅读 · 0 评论 -
osg复制多个相同物体修改材质属性问题
当通过osg复制多个相同物体时候,修改复制过来的某个物体材质属性时候,假设我们物体透明度,这个时候我们可能会发现修改某个物体,会导致其他复制过来的物体同样也被透明化。下面是解决方案:获得物体时候,只能获得自身材质,而不能去获得孩子材质,如果修改孩子材质,将会导致其他复制过来的也会被透明。 如下是详细代码osg::StateSet *state = iter->second->get转载 2013-11-14 09:35:25 · 1786 阅读 · 0 评论 -
osg animate 操作
osgAnimation几乎可以模拟所有的运动,在模拟的过程中,使用插值来计算当前的状态(也就是t)。interpolation介绍:http://sol.gfxile.net/interpolation/osg使用的easeMotion原理介绍: http://robertpenner.com/easing/其中几个常用的插值函数QuadMothion(二次插值),CubicMoti原创 2013-11-11 15:53:00 · 1967 阅读 · 0 评论 -
OpenSceneGraph FAQ
1、地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗?答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数。当空间点处于相机视空间内(不管它是否被别的物体遮挡)时,都是可以得到它对应的屏幕坐标的。如何判断一个点是否在地球背面?可以通过计算该点处垂直地面的方向UP,与相机方向的夹角,如果夹角为锐角,则可认为该点在地球背面。计算地球上任意翻译 2012-06-08 22:14:44 · 2737 阅读 · 0 评论 -
osg中将局部坐标系下的点坐标换算成全局坐标系下点的坐标
今天下午我遇到了这个问题,原来都准备去写 nodevisitor 了,后来发现 Transform.cpp 中已定义了 TransformVisitor 可直接实现 tranform 的连乘,然后查看 Transform 的成员函数,发现这个 TransformVisitor 是通过 Transform 的成员函数 computeLocalToWorld(...) ,传入相关参数后,直接就可计算出原创 2012-05-17 16:27:26 · 6202 阅读 · 1 评论 -
osg::ApplicationUsage使用
今天写代码看到了 osg::ApplicationUsage ,仔细看了看后发现,这只是一个记录性质的类,没有任何代码上的作用。原创 2012-05-09 11:30:39 · 1108 阅读 · 0 评论 -
osg 修改视景器中照相机的方法
OSG的视景器对象Viewer使用setCameraManipulator()来设置 一个针对此视景 器的漫游器。PS:使用Viewer::addEventHandler()把MatrixManipulator的派生类传递到视景器是没有意义的,因为用于表达相机观察方位的getMatrix()和getInverseMatrix()函数永远不会被Viewer调用,因而也就无法改变照相机原创 2012-05-08 17:11:04 · 4306 阅读 · 4 评论