OSG
文章平均质量分 73
tmljs1988
这个作者很懒,什么都没留下…
展开
-
OSG球表面点计算
自己画一个球体,球类继承自Geometry,通过addPrimitiveSet(DrawElementsUInt*)来添加三角形和四边形面片.class Geometry_sphere: public osg::Geometry{public: Geometry_sphere( double dRadius= 1, int iNumPartsLongtitude_half= 13, int iNumPartsLatitude_half= 13 ); void InitVertices();//初原创 2010-09-26 11:08:00 · 4171 阅读 · 0 评论 -
OSG坐标系解释????????
对于下面的代码(选自《OSG海军教程》第十课第一节 使用自定义矩阵来放置相机,但数据有更改):tankXform->setPosition( osg::Vec3(0,60,8) );// 相机位于坦克后方 60个单元,上方 7个单元。T.makeTranslate(0, 0,15 );//沿Z平移+15A= R * T;//设R是绕Y轴旋转+20度的矩阵C= osg::Matr原创 2012-05-13 11:23:38 · 9400 阅读 · 0 评论 -
OSG矩阵左乘顺序
―――――――对以下代码:osg::Matrix T0; // 设置矩阵的所有16个值: T0.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5, 0, 0, 1 ); // X方向移动 osg::Matrix T_S; // 设原创 2012-01-06 15:01:13 · 4949 阅读 · 0 评论 -
鼠标单击点在世界坐标系中的射线 计算原理
鼠标单击点在世界坐标系中的射线 计算原理参考osgManipulator/Dragger.cpp:求鼠标单击射线在世界坐标系中Znear、Zfar的交点:bool PointerInfo::projectWindowXYIntoObject(const osg::Vec2d& windowCoord, osg::Vec3d& nearPoint, osg::Vec3d& farPoin原创 2012-07-28 19:47:26 · 8567 阅读 · 2 评论 -
OSG鼠标选择求交
OSG鼠标选择求交////求交方法一:(用WINDOW坐标值,在相机下求交) //osg::ref_ptr picker = new osgUtil::LineSegmentIntersector( // osgUtil::Intersector::WINDOW, ea.getX(), ea.getY()); //osg原创 2012-07-31 14:25:51 · 14195 阅读 · 1 评论 -
OSG中获取视点的世界坐标
OSG中获取视点的世界坐标:(1)osg::Vec3 vPosEye, vCenter, vUp; cameraMaster->getViewMatrixAsLookAt( vPosEye, vCenter, vUp);//获取世界坐标系下的视点值(2)//主相机 osg::ref_ptr cameraMaster = viewer->getCamera原创 2012-07-31 13:54:36 · 11849 阅读 · 1 评论 -
Trackball详解????
问题:后面的TrackballManipulator::tb_project_to_sphere()????? void TrackballManipulator::computePosition(const osg::Vec3& eye,const osg::Vec3& center,const osg::Vec3& up){ osg::Vec3 lv(center-eye原创 2012-07-31 19:39:38 · 9624 阅读 · 0 评论 -
求交后高亮显示某个Drawable
求交后高亮显示某个Drawable:if (picker->containsIntersections()) { osg::Vec3 ptWorldIntersectPointFirst= picker->getFirstIntersection().getWorldIntersectPoint(); cout原创 2012-08-17 20:37:42 · 15607 阅读 · 0 评论 -
OSG显示图片的几种方法???????????????????????
方法一:没有几何体,直接显示图片(见王锐、钱学雷的《OSG三维渲染引擎设计与实践》P119 在场景中绘制位图):osfg::ref_ptr bmp= new osg::DrawPixels;bmp->setPosition( osg::Vec3( 0.0, 0.0, 0.0));bmp->setImage( osgDB::readImageFile("***.png"));osg:原创 2012-05-08 13:24:31 · 10410 阅读 · 2 评论 -
八叉树 判断长立方体是否在物体内???????
八叉树判断子长方体的8个点是否在物体内,可判断这8个点是不是在整个物体所有面的内侧。 注:(1)但如果物体不是凸壳呢,而是凹体呢???可能某个点在一个面外,但它仍在物体内。??????????(2)每个子长方体里的Object* oo;对象都是该物体的完整模型,该物体的面片并不会被分解。 参考源代码如下:(octtree.h、octtree.cpp、main.cpp)转载 2012-09-19 11:05:59 · 15367 阅读 · 0 评论 -
Node与NodeVisitor
osg::ref_ptr model;NodeVisitor vv( TRAVERSE_ALL_CHILDREN); model->accept( vv);假设model的模型结构如图:则model->accept( vv);多态,相当于调用Group::accept(NodeVisitor)。注意,我开始误认为Group没有对accept()进行重写,但后来在遍历原创 2013-04-07 22:47:02 · 15960 阅读 · 1 评论 -
rapid使用手册
1.0 INTRODUCTIONRAPID is a "Robust and Accurate Polygon Interference Detection"package. It is a programmer's tool, as opposed to a product forend-users. RAPID's API is intentionally narrow and转载 2013-04-14 16:23:23 · 13596 阅读 · 0 评论 -
OSG的HUD抬头文字显示
1. HUD流程图:完整源代码如下:/*OSG中的HUD,文字总是显示在最前面*/#include #include #include #include #include #include #pragma comment( lib, "osgd.lib"); //.在Debug版本下的库名都加原创 2012-05-13 20:50:53 · 7802 阅读 · 0 评论 -
OSG中的HUD实时显示视点坐标
/*OSG中的HUD实时显示视点坐标*/#include #include #include #include #include #include #include #include #pragma comment( lib, "osgd.lib"); //.在Debug版本下的库名都加d,如"o原创 2012-05-13 21:08:34 · 9530 阅读 · 1 评论 -
osg内核调试,跟踪(不修改内核)
<br />在学OSG的时候,有时候想进入OSG内跟踪看其源代码,逐行调试,以查看每步的具体执行情况,或代码中变量的值.由于OSG内核已经编译成了.dll文件,故不能对.cpp的内容进行追踪,只能追踪.h文件里面实现的那些函数.这时,可以继承一个类,把想追踪调用的那些函数复制在你自己的用户程序(非OSG内核)中(当然要加相应的头文件等),这样就可以达到追踪其内核的目的.当然,这只适应简单的东西较少的,如果调用的函数或类较多的话,那可能得另想办法了.<br />例如,我想追踪自动法线的过程,特别是smooth原创 2010-09-28 11:09:00 · 1668 阅读 · 1 评论 -
OSG物体随鼠标移动(即点移动)
物体随鼠标移动:代码如下:#include#include#include#include#include#include#include#include#include#pragmacomment( lib, "osgd.lib"); //此库用于Release版本.在Debug版本下的库名都加d,如"osgd.lib"#pragmacomment( lib, "osgDB原创 2010-10-17 12:08:00 · 11731 阅读 · 7 评论 -
OSG 更新回调(二种方法)
一. 几何体geometry更新回调UpdateCallback:可逐顶点变形动画.例子:跃动的线JumpLine:每次修改点的位置,来达到线跃动的效果.二. 节点更新回调NodeCallback:可改变某个节点的信息例子:牛的旋转RotateObj:通过改变牛的旋转矩阵来达到旋转的效果:原创 2010-10-17 16:34:00 · 3347 阅读 · 1 评论 -
OSG安装
1.在VS2005环境中,[工具],[选项],[项目和解决方案],[VC++ 目录],在包含文件中添加: D:/program files/OSG-2.8.0-vc80sp1/include ,在库文件中添加: D:/program files/OSG-2.8原创 2010-07-15 21:46:00 · 2260 阅读 · 0 评论 -
在OSG中安装vrml插件openvrml
在OSG中安装vrml插件:主要步骤:先编译openvrml,而osg中支持vrml插件,所以然后在cmake中指定vrml宏的include路径和lib文件(openvrml生成的.lib文件),cmake编译成功后,则可在VS2008的OSG的.sln的视图中找到工程pl原创 2011-09-23 17:17:26 · 4205 阅读 · 0 评论 -
osg中openvrml程序示例(可调试)
osg中openvrml程序示例(可调试):把IndexedFaceSet.cpp,ReaderWriterVRML2.h,ReaderWriterVRML2.cpp,Primitives.cpp这四个文件复制到新建工程内,(可能要在IndexedFaceSet.cpp,Re原创 2011-09-27 14:47:14 · 1714 阅读 · 0 评论 -
利用四元树来计算一个坐标点绕任意轴旋转后,新坐标点的推导过程
利用四元树来计算一个坐标点绕任意轴旋转后,新坐标点的推导过程(参考《(中文版)3D数学基础图形与游戏开发.pdf》): 参考源代码:void Quaternion::setToRotateAboutAxis(const Vector3 &axis, float theta) {// The axis of rotation must be normaliz转载 2012-01-04 11:38:23 · 3141 阅读 · 0 评论 -
肖鹏的CSouth漫游器 详解
肖鹏的CSouth漫游器 详解:下图是初始的Opengl坐标系,及相机右转,并往前走时的分析:上图中,当按下右箭头时,相机向右转,此时vRotation[2]由0变为-10,即上图的下半部分绕Z轴旋转了-10度,vRotation[2]=-10,图中角度A=90-10=90+ vRotation[2],此时ES=m_fMoveSpeed,M为S在X 轴上的投影点,SM=ES*Sin(A原创 2012-01-17 08:38:42 · 4602 阅读 · 1 评论 -
OSG中嵌入一个opengl代码(且opengl图形能动态更新)
OSG中嵌入一个opengl代码(且opengl图形能动态更新)(1)继承osg::Drawable::DrawCallback,在drawImplementation(osg::RenderInfo& renderInfo,const osg::Drawable* drawable)函数里添加opengl代码。(2)Drawable设置绘制回调函数,并注意要把显示列表设置为false原创 2012-02-23 15:22:05 · 3914 阅读 · 2 评论 -
OSG源代码部分剖析(待续)?????????????????????????????
class DrawableDrawCallback : public osg::Drawable::DrawCallback{ virtualvoiddrawImplementation(osg::RenderInfo& renderInfo,const osg::Drawable* drawable)const { std::原创 2012-05-08 13:10:16 · 5346 阅读 · 0 评论 -
OSG绘制的部分流程(待修改完善)????????????
主相机,从相机:void Viewer::updateTraversal(){//主相机if (_camera.valid() && _camera->getUpdateCallback()) _camera->accept(*_updateVisitor); //从相机for(unsigned int i=0; i{ osg::Camera* camera = ge原创 2012-01-17 08:54:05 · 2479 阅读 · 0 评论 -
3 OSG创建渲染线程的过程
OSG创建渲染线程的过程 图形渲染线程是静态函数,为:static unsignedint __stdcall StartThread(void *data)它是在int Thread::start()中被调用:int Thread::start(){pd->tid.set( (void*)_beginthreadex(NULL,pd->stackSize,Th原创 2013-04-29 23:38:40 · 14081 阅读 · 0 评论