osg资料收集 联系客服

发布时间 : 星期二 文章osg资料收集更新完毕开始阅读

真循环的方法。

#include #include #include

#include #include

#include int main() {

osg::Node* tankNode = NULL; osg::Group* root = NULL; osgViewer::Viewer viewer; osg::Vec3 tankPosit;

osg::PositionAttitudeTransform* tankXform;

tankNode = osgDB::readNodeFile(\ root = new osg::Group();

tankXform = new osg::PositionAttitudeTransform(); root->addChild(tankXform);

tankXform->addChild(tankNode); tankPosit.set(5,0,0);

tankXform->setPosition( tankPosit );

viewer.setCameraManipulator(new osgGA::TrackballManipulator()); viewer.setSceneData( root ); viewer.realize();

while( !viewer.done() ) {

viewer.frame(); } }

现在我们需要修改上述代码,以添加查找节点的函数。下面的递归函数有两个参数值:用于搜索的字符串,以及用于指定搜索开始位置的节点。函数的返回值是指定节点子树中,第一个与输入字符串名称相符的节点实例。如果没有找到这样的节点,函数将返回NULL。特别要注意的是,使用访问器将提供更为灵活的节点访问方式。而下面的代码只用于展示如何手动编写场景图形的遍历代码。

osg::Node* findNamedNode(const std::string& searchName, osg::Node* currNode) {

osg::Group* currGroup; osg::Node* foundNode;

// 检查输入的节点是否是合法的,

// 如果输入节点为NULL,则直接返回NULL。 if ( !currNode) {

return NULL;

}

// 如果输入节点合法,那么先检查该节点是否就是我们想要的结果。 // 如果确为所求,那么直接返回输入节点。 if (currNode->getName() == searchName) {

return currNode; }

// 如果输入节点并非所求,那么检查它的子节点(不包括叶节点)情况。 // 如果子节点存在,则使用递归调用来检查每个子节点。

// 如果某一次递归的返回值非空,说明已经找到所求的节点,返回其指针。 // 如果所有的节点都已经遍历过,那么说明不存在所求节点,返回NULL。 currGroup = currNode->asGroup(); if ( currGroup ) {

for (unsigned int i = 0 ; i < currGroup->getNumChildren(); i ++) {

foundNode = findNamedNode(searchName, currGroup->getChild(i)); if (foundNode)

return foundNode; // 找到所求节点。 }

return NULL; // 遍历结束,不存在所求节点。 } else {

return NULL; // 该节点不是组节点,返回NULL。 } }

现在我们可以在代码中添加这个函数,用于查找场景中指定名称的节点并获取其指针。注意这是一种深度优先的算法,它返回第一个符合的节点指针。 我们将在设置场景之后,进入仿真循环之前调用该函数。函数返回的开关节点指针可以用于更新开关的状态。下面的代码用于模型载入后,执行查找节点的工作。 osg::Switch* tankStateSwitch = NULL; osg::Node* foundNode = NULL;

foundNode = findNamedNode(\ tankStateSwitch = (osg::Switch*) foundNode; if ( !tankStateSwitch) {

std::cout << \ return -1; }

(未完)

20:25 | 添加评论 | 固定链接 | 写入日志 | NPS教程 10月29日

收到《OpenSceneGraph快速入门指导》印刷版

今天总算收到《OpenSceneGraph快速入门指导》的印刷版本了,从9月初本书发行后开始订购,直到上周末UPS才送到~~果然全球快递的效率就是高…… 虽说我是这本书的译者,让人家直接邮寄一套也未尝不可,(关于本书中文版的发行公告,请参阅http://wangray84.spaces.live.com/blog/cns!8D8B8414660C1E7E!157.entry)不过为了有纪念意义,还是花了$35,请美国的朋友代买再寄回来。现在想想,似乎有点劳民伤财呢。 不过话说回来,果然国外的印刷品印刷质量非同寻常,书的质感不是一般的好~~呵呵,可惜在上面发现了自己翻译过程中出现的错别字,挺煞风景的,不过这终究是一件好事,不管怎么说,也算是我自己在三维仿真领域的“研究专著”呢。

好像最近在Google已经有人把“OSG”和“王锐”作为关键词连起来搜索了,呵呵,蛮有成就感的~~嗯,不过最近有点怠慢了,还要加紧学习才是,不要在这个行当掉队才好。 关于如何订购这本书的印刷版:

1、登陆http://www.lulu.com/content/1164927,订购并设法付钱(Paypal?),也可以免费下载PDF电子版;

2、送货方式如果在北美以外,恐怕就无效了,只能托美国的朋友买;

3、过海关的时候可能会耽搁一段时间,我订的时候就在海关被扣了……难道OSG以后会成为战略物资吗?那我要申请加入NASA或者US Navy了~~ :)

4、本书英文版遵循Creative Commons(CC)授权,请随意传播,勿用于商业目的;

5、我的翻译工作由SkewMatrix和CGSD公司授权~~因此中文版同样遵循CC授权,不会以任何形式付诸商业目的,换句话说,本书印刷版的销售,我也一分钱都拿不到。 :(

感谢我的父母,Xuelei,FreeSouth,FlySky,以及共同学习VR的朋友们对我的支持,我也必然会继续努力。

下一步做什么呢?osgModeling这个项目已经开始做了,迟早会放到SourceForge上去,还有Navy教程的翻译~~慢慢来吧……

22:51 | 添加评论 | 阅读评论 (4) | 固定链接 | 写入日志 | OSG 9月25日

原创小说《八百》开始连载

《八百》是我的第二篇原创小说(第一篇为Sohu原创上连载完毕的《无常界》),因为个人的喜好,所以还是战争题材,而且依然偏重于对战争惨烈场面的描绘和思考。 个人感觉对于故事情节的发展还是很难把握,有些地方觉得捉襟见肘;不过一边写一边对于信念和生命又有了不少感触,很多有感而发的话随手写上,读起来多少有些身临其境起来,心里也很是惬意。果然写小说是一件令身心愉悦的事情,太功利,抑或太过求完美,都反而让人疲乏~~

写作的脚步永远不会停止。毕竟程序写得久了,多少会让人觉得乏味和无聊;而文学创作,即使只是孤芳自赏,也足以让我从中体味到乐趣和阳光般耀眼的希望了。

感谢spiderhunter,我们之间的闲聊无意中已经给我提供了开始和完成创作的动力; 感谢我的妈妈,作为第一读者,给我提出了很多中肯和尖锐的意见。 目前小说连载于“铁血社区读书网站”,地址为: http://book.tiexue.net/Book/13669 写作及完成时间: 2007.6.9 ~ 2007.9.23

连载开始时间: 2007.9.24 故事大纲:

1937年10月末,淞沪会战临近尾声。

在战事败局已定的情况下,为了拖延日寇的脚步,也为了证明自己的尊严,中国军队88师第524团团副谢晋元,营长杨瑞符奉命死守闸北的四行仓库,他们面对的敌人有数十万之众,而所部仅有452人,对外声言有800人,时称“八百壮士”。

本文自知无力表现当时战况的惨烈,也无力真实地描画出英雄的神韵。谨以数万字的笔墨,在七十年后,表达对勇者的敬意和哀思而已。 是的,

上天并未赋予他们多么崇高的使命, 但他们却赋予自己如此厚重的生命。 主要角色:

水听涛,谢晋元(史实),杨瑞符(史实),杨惠敏(史实);松林若火,梅津久治,王德臣