成果总结:
1.关于获取模型的世界坐标
问了师姐,师姐给我讲解了一些模型结构上的东西,指了个大致方向,说实话半懂不懂,回来自己试了试,没有成功。
正巧经理来跟我讨论下一步的计划,我就跟他讲了坐标的问题。
第二天他告诉我说,目前没有现成的接口可以用;他也跟师姐讨论了,获取顶点坐标之后再区分有效可用的,很麻烦;说在考虑从数据源下手,对数据结构做些要求。让我也再想想办法。
同学告诉我教材上有“输出场景中所有顶点”的代码。花了一天照着写,将void apply(osg::Geode& geode)括号中改成我们的数据格式,发现无法进入apply函数。猜测还是跟数据本身结构格式有关,自己定义的数据几何体,多少还是跟osg自带的geode(geometry)有区别。。。
打算就这个问题再请教一下师姐,可惜这几天她都不在。
这个问题只能先放一放了。
2.框选一个区域的模型
使用的是:
osg::ref_ptr<osgUtil::PolytopeIntersector> intersector =new osgUtil::PolytopeIntersector(osgUtil::Intersector::WINDOW, xMin, yMin, xMax, yMax);
参考:http://2339637.blog.51cto.com/2329637/1406631
并结合已有的“选择”功能的代码,难度不是很大。
遇到的几个问题总结如下:
①在拖动鼠标框选的过程中,模型(相机)也会跟着旋转。
参考:原文和http://bbs.osgchina.org/forum.php?mod=viewthread&tid=10022&highlight=%BF%F2%D1%A1&_dsign=d3a79e74。
了解到,设置osg::observer_ptr<osg::Geometry> geometry;和osg::Vec3Array* vertex = new osg::Vec3Array(4);大概是为了让场景反方向运动,抵消鼠标拖动导致的移动。但是,又是由于模型与geometry的区别,这一方法无法实现。
最终方法:使用了case(osgGA::GUIEventAdapter::DRAG ):return true;,此时只要打开开关,场景被固定下来,无法再随鼠标运动。
②清除模型的高亮颜色。
响应键盘按键。跟“选择”的代码,最终才明白按键真正响应的是哪部分代码,是哪几行起到了恢复原有颜色的作用。删除了多余无用代码。
③框选几个模型时,只有一个模型高亮。
是自己的书写原因,照搬照抄多写了一个break,致使找到一个模型并高亮后就跳出了循环,其他模型没能进入循环着色。还是跟代码、设断点找出来的。
下周目标:
1.每周都很迷茫,,常常扣手机,已经扣到不想看电子设备了。现在如果能解决坐标问题,我的任务基本都完成了>.<哎
然而解决不了,定不下来……
牙龈发炎很严重,痘痘此起彼伏很烦=。=
定了月底去看皇上的票,纠结了很久周几回来,担心赶不上组会,最后还是决定赌一把,万一赶不上,只能请假了,自己这段时间也算是无功无过,即使被老师批评一顿,去那么远玩到了就是值得的。蓝先生说的对,做人最重要的是开心。哈哈。皇上也说,新疆不会让我失望。期待~~
就是路费太贵!
2.实在做不出计划了。上周还真是说对了,,坐标没那么容易获取……坑啊。真的只差这个了。
目前待解决的几个关键点如下:
①模型底部轮廓坐标。(不能说成顶点坐标,意思不同)
②分析窗户还是整个墙面。窗户的话,需要程序能筛选出模型的窗户;墙面的话,要考虑如果剔除死角和背光面。
③是否需要区域光影?还是整个屏幕光影效果。
after all,加油!坚持!