posts - 2, comments - 1, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 OGRE1.7发布了. 以前的插件导不出对应的实时材质了. 于是下决心自己写一个.
想着好歹在引擎组呆了这么久. 这么个插件应该写的得心应手.  没想却栽了无数的跟头.
现在记录下这些教训.

言归正传. 首先google. baidu. MAX 插件编写.  得知MAX的插件种类庞多. 先的选择一个
合适的. 几经波则. 觉得GUP比较合适. 这里简要介绍一下它的两个成员函数
GUP::Start() 和 GUP::Stop(). 根据字面意思就能得知它的用途. 分别会在插件启动和卸载
的时候被调用. 这里继承了它. 并将他作为整个导出插件的框架

有个菜单应该很方便. 不过创建这个菜单让我重装了两次系统. 
万恶的IMenuManager::RegisterMenuBarContext 和IMenuManager::RegisterMenu,
如果误调用这两个函数. 会导致MAX启动一次之后再也无法启动.  粘出创建菜单的代码.

 

{
    IMenuManager* pMenuMgr = GetCOREInterface()->GetMenuManager();
    bool bNeedCreate = false;

    bNeedCreate = pMenuMgr->RegisterMenuBarContext( NBMenuContexID, NBMenuContexName );

    if ( bNeedCreate == false )
    {
        std::string strInfo = NBMenuContexName;
        strInfo = strInfo + " 已经注册过\n";
        MaxScriptPrinf( strInfo.c_str() );
        return true;
    }

    MaxScriptPrinf( "开始创建NB菜单\n" );
    IMenu* pMainMenu = pMenuMgr->GetMainMenuBar();
    IMenuItem* pItemNBMenu = GetIMenuItem();
    pMainMenu->AddItem( pItemNBMenu );

    IMenu* pNBMenu = GetIMenu();
    pNBMenu->SetTitle( "NBPlugin" );
    pMenuMgr->RegisterMenu( pNBMenu, 0 );

    pItemNBMenu->SetSubMenu( pNBMenu );
    
    ActionTable* pActionTable = g_NBMenu.action_table;
    ActionItem* pActionItem = NULL;
    IMenuItem* pMenuItem = NULL; 
    
    //    添加事件菜单项
    pMenuItem = GetIMenuItem();
    pActionItem = pActionTable->GetAction( IT_Preview );
    assert( pActionItem );
    pMenuItem->SetActionItem( pActionItem );
    pNBMenu->AddItem( pMenuItem );


    pMenuMgr->UpdateMenuBar();
    MaxScriptPrinf( "NB菜单创建完毕\n" );
    return true;
}

创建好菜单. 通过相应菜单项调出MFC对话框.这里顺便提一下. 经过实验. 在MAX中是可以使用MFC DLL的.
.  只是. 这样就无法方便的使用MAX提供的插件生成向导了.

准备工作都做好了. 开始解析MAX数据. 使用MAX提供的IGMAE来找出相关数据.几经波则. 在解析MAX的mesh数据和骨骼数据时. 遇到了太多困难. 例子给的信息太少. 网上的相关教程也少.  逼的我都有给Autodesk 公司投简历的冲动. 思来想去. 决定和MAX妥协. 利用oFusion导出mesh. 然后在载入mesh. 从MAX中解析出材质. 达到预览的效果. 最后导出实时材质.


 

Feedback

# re: 制作MAX插件 导出OGRE1.7 的实时材质  回复  更多评论   

2014-03-21 13:29 by 沙粒
你真是帮了我大忙了,我在Max上也添加了菜单,但是不知道怎么设置actionitem

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理