
OSG
snail_hunan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OSG中改变模型的位置,姿态, osg::MatrixTransform的使用
OSG改变物体位置,姿态。 OSG对物体进行平移,旋转,缩放。原创 2015-01-16 19:57:05 · 17802 阅读 · 0 评论 -
OpenThreads库的使用-Thread
Thread简介OpenThread库,提供了一个Thread类,供用户创建自己的线程。其使用非常方便,用户只需要继承自OpenThreads::Thread类,然后自己重写run接口即可。Thread程序示例下面程序,使用一个线程,去卖票。g_ticketCounts表示当前可用的票的数量。#include <OpenThreads/Thread>#include <iostream>int g原创 2017-04-09 08:04:20 · 6243 阅读 · 2 评论 -
OpenThreads库的使用-Mutex
Mutex是什么Mutex,叫互斥锁。 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为” 互斥锁” 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。为什么使用Mutex因为线程存在并发性,并发容易导致问题。举个例子:A,B两个售票员,看到最后还有一张车票。同时,正好有C,D两个人要买这张车票。那么这个车票怎么卖?A认为可以卖给C,B认为可以卖原创 2017-04-09 10:13:35 · 2151 阅读 · 1 评论 -
OpenThreads库的使用-Atomic
Atomic简介Atomic,原子操作。 所谓原子操作,就是指这个操作,要么不执行,要么全部执行完,中间不允许被别人打断。 OpenThread库中的Atomic,表达的是一个无符号整形数,但是这个数的操作是原子性的。这样,即使有多个线程对它进行操作,还是可以确保这个操作的正确性。Atomic使用Atomic的使用,和一个正常的无符号整数的使用方式类似。先定义,然后通过前缀++,或者–操作符,来原创 2017-04-09 10:55:25 · 1417 阅读 · 0 评论 -
OpenThreads使用-Barrier
Barrier简介Barrier,栅栏。 栅栏,用来阻挡线程。栅栏有个栅栏强度,为一个数值,当被阻挡的线程达到栅栏强度时,栅栏被冲破,所有被栅栏阻挡的线程运行。Barrier使用Barrier的使用,也比较简单,哪个线程调用Barrier的block函数,哪个线程就被阻挡在栅栏外。当栅栏被冲破之后,又自动恢复栅栏,继续阻挡下一次前来的线程。#include <OpenThreads/Thread>原创 2017-04-09 15:14:26 · 2001 阅读 · 1 评论 -
OpenThreads使用-BlockCount
BlockCount简介BlockCount,障碍物个数。 之前通过一个Block可以阻塞线程。但是当一个线程,需要多个条件都满足时,才能继续运行。这怎么办呢?这个BlockCount就是用来干这个的。BlockCount使用BlockCount的使用,和Block类似。阻塞线程,使用block函数。释放线程,使用release函数。但是比Block多出来的功能是,使用completed函数,表示原创 2017-04-09 17:17:06 · 1096 阅读 · 0 评论 -
OSG中的材质Material
材质概念材质,反应的是物体表面对入射光的反射量。发亮的材质,反射更多的入射光。发暗的材质,吸收更多的入射光。对于透明的表面,一些入射光穿透了材质。OSG中对材质的处理OSG中,通过osg::Material这个类,来对OpenGL的glMaterial进行了封装。Material主要用到四种颜色模式:1. 环境光 AMBIENT2. 漫反射 DIFFUSE3. 镜面光 SPECULAR4.原创 2017-05-01 15:59:38 · 5658 阅读 · 1 评论 -
OpenThreads使用-Block
Block简介Block,障碍物,阻塞。 通过Block对线程进行阻塞,然后释放障碍物,使得线程继续运行。Block使用Block的使用,通过调用block函数,阻塞调用线程。然后通过release函数,释放所有被这个Block阻塞的线程。 下面这个程序,开启A,B线程,去售票,然后主线程自己阻塞。当A卖完10张票以后,释放Block,主线程继续运行,去开启C线程售票。同时A阻塞自己,停止售票。原创 2017-04-09 16:24:41 · 1005 阅读 · 0 评论 -
三个线程顺序打印ABC
我通过使用OpenThreads库的BlockCount类,实现顺序打印ABC,代码如下。#include <OpenThreads/Thread>#include <OpenThreads/Block>#include <string>#include <iostream>#include <vector>class PrintThread : public OpenThreads::Th原创 2017-05-04 22:47:39 · 1491 阅读 · 0 评论 -
OSG中的粒子系统
OSG中提供了粒子系统,可以实现雨雪效果。本文提供OSG中的粒子系统的基本使用。源代码#include <osgViewer/Viewer>#include <osg/Geode>#include <osgParticle/ParticleSystem>#include <osgParticle/ParticleSystemUpdater>#include <osgParticle/Modu原创 2015-08-03 22:02:33 · 2831 阅读 · 0 评论 -
OSG中LOD的使用
LOD概念LOD是Level Of Detail 的缩写,LOD允许程序根据摄像机与物体的距离,来决定使用哪个模型。为什么要使用LOD使用LOD是为了兼顾程序的运行效率与物体显示的精细程度。当物体离摄像机很远的时候,物体看起来就是一个点,这时候你使用再精细的模型,最终屏幕上成像也是一个点。而你用的模型越精细,计算机内部需要的计算量越大。所以当物体离相机远的时候,使用粗略模型,当物体离相机近的时候,使原创 2015-07-11 23:14:39 · 9106 阅读 · 6 评论 -
OSG中的智能指针
OSG中使用了智能指针,对堆内存进行管理。 智能指针,其实就是在原始指针的基础上,加上了一个引用计数,然后通过引用计数的值,来决定什么时候释放内存。其目标就是确保一段内存会被释放,且只被释放一次。为什么要用智能指针呢?就是因为不知道什么时候该删除指针所指的内存块,所以才引入智能指针。看下面的例子。#include using namespace std;void useP原创 2015-01-24 13:22:31 · 1088 阅读 · 0 评论 -
OSG中的Hello,world!
上面程序就是OSG中的Hello,world!2行包含文件,一个main函数,4行代码,组成了OSG中的hello,world。要能正确运行这个程序,首先要正确搭建好OSG的开发环境,开发环境的搭建,网上一大堆教程。osgViewer::Viewer是OSG中的一个场景查看器。osg::Node是OSG场景中的一个节点类,OSG通过将所有的物体抽象成Node类,方便原创 2015-01-15 21:31:34 · 1104 阅读 · 1 评论 -
OSG中添加多个物体, OSG::Group的使用
OSG中添加多个物体, osg::Group的使用。原创 2015-01-17 19:12:03 · 5427 阅读 · 2 评论 -
osg::BillBoard的用法
osg::BillBoard的使用, 让模型根据眼睛位置进行旋转。原创 2015-01-22 00:01:07 · 3410 阅读 · 0 评论 -
OSG中显示模型自带的动画
假如三维模型自带动画,在OSG中,只需要得到模型的动画列表,然后从中选择一个动画,进行播放就可以了。而模型的动画列表,通常存放在UpdateCallBack中。#include #include #include int main(int argc, char* argv[]){ osgViewer::Viewer viewer; //读取带动画的节点 osg::No原创 2015-01-22 21:09:13 · 3349 阅读 · 0 评论 -
OSG中文字的使用,osgText
文字,通常涉及字体,大小,颜色等信息。OSG中使用文字很简单,只要几行代码就搞定了。原创 2015-01-19 22:55:50 · 3941 阅读 · 0 评论 -
OSG中的动画
OSG中的动画, AnimationPath, AnimationPathCallback, PositionAttitudeTransform的使用。之前搞了两头牛了,但是它们都是静止的。现在我想让一头牛,向另一头牛移动。这就涉及OSG中的动画了。动画,运动的画面。在实际生活中,我们的动作什么的,都是连续的。而我们制作电影或者软件时的动画,其本身是非连续的画面,但是当这些非连续的画面以足原创 2015-01-18 10:24:50 · 2288 阅读 · 1 评论 -
OSG中使用HUD
OSG中HUD的使用原创 2015-01-23 22:20:30 · 1085 阅读 · 0 评论 -
OSG::Drawable, Geode的用法
osg::Drawable表示可绘制的物体的抽象接口, 可绘制的物体本身不能被加到场景中,要使用Geode将可绘制物体附加到其上。#includeint main(int argc, char **argv){ osgViewer::Viewer viewer; //创建三角形的顶点数组 osg::Vec3 myCoords[] = { osg::Vec原创 2015-01-21 00:12:45 · 3075 阅读 · 0 评论 -
OSG设置半透明显示
OSG设置半透明显示,需要设置显示颜色的alpha值小于1,且开启融合模式,设置渲染方式为透明方式。osg::Geometry* polyGeom = new osg::Geometry();//颜色为半透明颜色osg::ref_ptr<osg::Vec4Array> shared_colors = new osg::Vec4Array;shared_colors->push_back(osg原创 2017-04-12 21:57:03 · 4232 阅读 · 0 评论