我要发帖 回复

正式会员

9

主题

51

积分

0

专家分

:

私信
发表时间 : 2008-12-25 19:32:10 | 浏览 : 1417    评论 : 5
MFC的一个框架,分栏后左边是树形结构,右边是场景。
下面是点击树形控件响应代码:
void CD1::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
//value为双击后获得的值,以便用下面的switch语句
HTREEITEM hSelectItem=m_wndTree.GetSelectedItem();                                       
DWORD value=m_wndTree.GetItemData(hSelectItem);
//漫游       
static vpPathWayPointSet* waypoints = new vpPathWayPointSet("MPI_WayPointSet.way");
static vpPathNavigator* navigator   = new vpPathNavigator("MPI_Navigator.nav");

vpObserver *obs= *vpObserver::begin();
vpObject* pObject_myObject = new vpObject();

switch (value)
{
case 1:
//实现漫游
                  {       
        obs = vpObserver::find( "myObserver");
        if (obs)
        {
        obs->setStrategy(navigator);
        obs->setStrategyEnable(true);
        }                       
                     break;
                  }
case 2:
//  定位到场景中的某块地方              
               {       
                     obs->setStrategyEnable(false);
                     obs->setTranslate(2000,2000,150);
        obs->setRotate(90,0,0);
                     break;
                 }
case 3:
//想在这里实现向场景中加载object
        {
        pObject_myObject->setName("farmhouse.flt");
        pObject_myObject->setCullMask( 0x0FFFFFFFF );
        pObject_myObject->setRenderMask( 0x0FFFFFFFF );
        pObject_myObject->setIsectMask( 0x0FFFFFFFF );
        pObject_myObject->setStrategyEnable( false );
        pObject_myObject->setTranslate(2450,2500,0);
        pObject_myObject->setRotate(0,0,0 );
        pObject_myObject->setScale( 1.000000 ,  1.000000 ,  1.000000 );
        pObject_myObject->setStaticEnable( false );
        pObject_myObject->setFileName("hummer");
        pObject_myObject>setLoaderAttribute(                  vpGeometryPageable::LOADER_ATTRIBUTE_GENERATE_VERTEX_ARRAYS ,  true );                                 
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_GENERATE_DISPLAY_LISTS ,  true );
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_COMBINE_LIGHT_POINTS ,  true );
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_PRESERVE_QUADS ,  false );
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_OPTIMIZE_GEOM ,  true );
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_COMPUTE_NORMALS ,  false );
        pObject_myObject->setLoaderAttribute( vpGeometryPageable::LOADER_ATTRIBUTE_COMPATIBILITY_MODE ,  true );
        pObject_myObject->setFlattenEnable( true );
        pObject_myObject->setCleanEnable( true );
        pObject_myObject->setAutoPage( vpObject::AUTO_PAGE_SYNCHRONOUS );
        vpScene *pScene = vpScene::get(0);
        pScene->addChild(pObject_myObject);
               
        break;
        }
        }
        // TODO: 在此添加控件通知处理程序代码
        *pResult = 0;
}
加载object在前面的帖子里也多次有人问过,obuil大侠给了个很完整的代码,我就用的这段代码(上面)。可是setLoaderAttribute();setFlattenEnable();setCleanEnable();这三个成员函数没有,就是在VC中,这些代码下面有红色的波浪线 (不知道怎么描述,就这么说吧),(是不是少了什么头文件啊),在很早前的一个帖子里有人给出的代码没有用到setLoaderAttribute();setFlattenEnable();setCleanEnable()和setAutoPage()这四个函数,其他的都和obuil给出的一样,我就去掉了这四个函数,编译成功了,漫游和定位都可以显示,可是点击了加载模型(case:3),场景一点变化都没有。我加断点查看,这段代码也确实运行了啊,看以前的帖子,好像说是与config有关,是不是这样的啊!
有版主提到过提问的艺术的问题,我也想尽量把自己的问题描述清楚点,怎奈自己菜鸟,有些东东不知道该怎么描述,这是抱歉,也不知道我的问题你们看懂了没~~~~

再说一下我学习中的困惑:
我是个新手,刚开始学习VP没多久。学起来真是感觉寸步难行!VP资料真是难找,能利用的资源就是论坛和自带的例子。对于高手来说,已经措措有余,可我感觉好吃力。论坛里问问题的多,回答的少,而且有些问题是反复的问(呵呵,高手都回答烦了吧),我觉得主要还是没真正搞懂的原因,大家只是找来代码,实现了什么功能,就OK了,对于为什么要这样写代码,看懂的人不多,对于实现机理不清楚,有些在控制台下实现了,弄到MFC下又不行了。看自带的例子,我自己感觉好头痛,那些函数不知道是实现什么的,看定义看声明,越看越糊涂。真是郁闷
比方说上面的代码:       
          pObject_myObject->setName("farmhouse.flt");                这个是添加模型,可以猜出来
        pObject_myObject->setCullMask( 0x0FFFFFFFF );         下面的几个什么掩码吧
        pObject_myObject->setRenderMask( 0x0FFFFFFFF );
        pObject_myObject->setIsectMask( 0x0FFFFFFFF );
        pObject_myObject->setStrategyEnable( false );        这个就不懂了,设置策略关闭?什么策略呢
        pObject_myObject->setTranslate(2450,2500,0);       看的最懂的就是下面三个
        pObject_myObject->setRotate(0,0,0 );
        pObject_myObject->setScale( 1.000000 ,  1.000000 ,  1.000000 );
        pObject_myObject->setStaticEnable( false );           这又是什么意思呢
        pObject_myObject->setFileName("hummer");         取个名字吧
        pObject_myObject>setLoaderAttribute                     设置属性~~?)
就知道是来加object用的,还是不知道为什么这样写,我少些几个行不行呢...
VP涉及到很多知识,一时学好是不容易,我现在真的很苦恼,我该从哪里下手呢,学些什么东西呢,跪请高手来解答!!

最近VR访客

paul_huang 评论于2008-12-25 21:00:43
这个问题不用斑竹来回答
你把 pObject_myObject->setName和pObject_myObject->setFileName理解反了,看得出来你没有看文档说明 呵呵
Where there is will , there is a way !

EMAIL:paul_huang@yahoo.cn
pandorasong 评论于2008-12-26 09:54:36
好囧哦~~~

要好好学习,不要在这么囧了
你说的文档是英文的吗
还有该怎么学习VP呢,给个建议~~
henry0henry 评论于2008-12-26 16:24:13
我也是新手,但是我知道很读文档和加强语言基础是非常必要的
zjxjjhx 评论于2008-12-29 21:23:18
多看文档是方面,另外也要多调试,像哪些函数,你去掉和不去掉对比看看运行效果,改改数据看看变化,理解的就会很深
pplander 评论于2009-1-2 23:32:36
把下面两句改下
pObject_myObject->setName("farmhouse");               
pObject_myObject->setFileName("farmhouse.flt");               

不过即使改过来,你还是直接在MFC响应事件中动态创建添加新vpObject到vpSence中这是非常危险的,基本上行不通。。

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2022-1-29 12:41 PM

返回顶部