﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-3D引擎研究</title><link>http://www.cppblog.com/yang-yang/</link><description>OGRE</description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 00:27:16 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 00:27:16 GMT</pubDate><ttl>60</ttl><item><title>制作MAX插件 导出OGRE1.7 的实时材质</title><link>http://www.cppblog.com/yang-yang/archive/2010/03/02/108749.html</link><dc:creator>杨杨</dc:creator><author>杨杨</author><pubDate>Tue, 02 Mar 2010 15:34:00 GMT</pubDate><guid>http://www.cppblog.com/yang-yang/archive/2010/03/02/108749.html</guid><wfw:comment>http://www.cppblog.com/yang-yang/comments/108749.html</wfw:comment><comments>http://www.cppblog.com/yang-yang/archive/2010/03/02/108749.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/yang-yang/comments/commentRss/108749.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yang-yang/services/trackbacks/108749.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt"><span style="FONT-SIZE: 12pt">&nbsp;OGRE1.7发布了. 以前的插件导不出对应的实时材质了. 于是下决心自己写一个.<br>想着好歹在引擎组呆了这么久. 这么个插件应该写的得心应手.&nbsp; 没想却栽了无数的跟头.<br>现在记录下这些教训. <br><br>言归正传. 首先google. baidu. MAX 插件编写.&nbsp; 得知MAX的插件种类庞多.&nbsp;先的选择一个<br>合适的. 几经波则. 觉得GUP比较合适. 这里简要介绍一下它的两个成员函数<br>GUP::Start() 和 GUP::Stop(). 根据字面意思就能得知它的用途. 分别会在插件启动和卸载<br>的时候被调用. 这里继承了它. 并将他作为整个导出插件的框架</span></p>
<p>有个菜单应该很方便. 不过创建这个菜单让我重装了两次系统.&nbsp;<br>万恶的IMenuManager::RegisterMenuBarContext 和IMenuManager::RegisterMenu,<br>如果误调用这两个函数. 会导致MAX启动一次之后再也无法启动.&nbsp; 粘出创建菜单的代码.<br></p>
<p>&nbsp;</p>
<div><img id=Codehighlighter1_0_1038_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_1038_Open_Text.style.display='none'; Codehighlighter1_0_1038_Closed_Image.style.display='inline'; Codehighlighter1_0_1038_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_1038_Closed_Image onclick="this.style.display='none'; Codehighlighter1_0_1038_Closed_Text.style.display='none'; Codehighlighter1_0_1038_Open_Image.style.display='inline'; Codehighlighter1_0_1038_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IMenuManager*&nbsp;pMenuMgr&nbsp;=&nbsp;GetCOREInterface()-&gt;GetMenuManager();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;bNeedCreate&nbsp;=&nbsp;false;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;bNeedCreate&nbsp;=&nbsp;pMenuMgr-&gt;RegisterMenuBarContext(&nbsp;NBMenuContexID,&nbsp;NBMenuContexName&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;bNeedCreate&nbsp;==&nbsp;false&nbsp;)<br><img id=Codehighlighter1_210_342_Open_Image onclick="this.style.display='none'; Codehighlighter1_210_342_Open_Text.style.display='none'; Codehighlighter1_210_342_Closed_Image.style.display='inline'; Codehighlighter1_210_342_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_210_342_Closed_Image onclick="this.style.display='none'; Codehighlighter1_210_342_Closed_Text.style.display='none'; Codehighlighter1_210_342_Open_Image.style.display='inline'; Codehighlighter1_210_342_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::string&nbsp;strInfo&nbsp;=&nbsp;NBMenuContexName;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strInfo&nbsp;=&nbsp;strInfo&nbsp;+&nbsp;"&nbsp;已经注册过\n";<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxScriptPrinf(&nbsp;strInfo.c_str()&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MaxScriptPrinf(&nbsp;"开始创建NB菜单\n"&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IMenu*&nbsp;pMainMenu&nbsp;=&nbsp;pMenuMgr-&gt;GetMainMenuBar();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IMenuItem*&nbsp;pItemNBMenu&nbsp;=&nbsp;GetIMenuItem();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pMainMenu-&gt;AddItem(&nbsp;pItemNBMenu&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IMenu*&nbsp;pNBMenu&nbsp;=&nbsp;GetIMenu();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pNBMenu-&gt;SetTitle(&nbsp;"NBPlugin"&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pMenuMgr-&gt;RegisterMenu(&nbsp;pNBMenu,&nbsp;0&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pItemNBMenu-&gt;SetSubMenu(&nbsp;pNBMenu&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ActionTable*&nbsp;pActionTable&nbsp;=&nbsp;g_NBMenu.action_table;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ActionItem*&nbsp;pActionItem&nbsp;=&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IMenuItem*&nbsp;pMenuItem&nbsp;=&nbsp;NULL;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;添加事件菜单项<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pMenuItem&nbsp;=&nbsp;GetIMenuItem();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pActionItem&nbsp;=&nbsp;pActionTable-&gt;GetAction(&nbsp;IT_Preview&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;pActionItem&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pMenuItem-&gt;SetActionItem(&nbsp;pActionItem&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pNBMenu-&gt;AddItem(&nbsp;pMenuItem&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pMenuMgr-&gt;UpdateMenuBar();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MaxScriptPrinf(&nbsp;"NB菜单创建完毕\n"&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</div>
<p>创建好菜单. 通过相应菜单项调出MFC对话框.这里顺便提一下. 经过实验. 在MAX中是可以使用MFC DLL的.<br>.&nbsp; 只是. 这样就无法方便的使用MAX提供的插件生成向导了.<br><br>准备工作都做好了. 开始解析MAX数据. 使用MAX提供的IGMAE来找出相关数据.几经波则. 在解析MAX的mesh数据和骨骼数据时. 遇到了太多困难.&nbsp;例子给的信息太少. 网上的相关教程也少. &nbsp;逼的我都有给Autodesk 公司投简历的冲动. 思来想去. 决定和MAX妥协. 利用oFusion导出mesh. 然后在载入mesh. 从MAX中解析出材质. 达到预览的效果. 最后导出实时材质.<br><br><br>&nbsp;</p>
<img src ="http://www.cppblog.com/yang-yang/aggbug/108749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yang-yang/" target="_blank">杨杨</a> 2010-03-02 23:34 <a href="http://www.cppblog.com/yang-yang/archive/2010/03/02/108749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CPP BLOG 初来乍到</title><link>http://www.cppblog.com/yang-yang/archive/2010/02/27/108577.html</link><dc:creator>杨杨</dc:creator><author>杨杨</author><pubDate>Sat, 27 Feb 2010 15:21:00 GMT</pubDate><guid>http://www.cppblog.com/yang-yang/archive/2010/02/27/108577.html</guid><wfw:comment>http://www.cppblog.com/yang-yang/comments/108577.html</wfw:comment><comments>http://www.cppblog.com/yang-yang/archive/2010/02/27/108577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yang-yang/comments/commentRss/108577.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yang-yang/services/trackbacks/108577.html</trackback:ping><description><![CDATA[<p>&nbsp; 从事游戏开发两年多了. &nbsp; 一直在引擎这块摸索. 多少也总结了一些小心得. 希望通过这个博客和大家分享. <br><br>&nbsp; 这两年里. 生活工作. 感悟颇多. 却很模糊. 才发现应该提笔记录下来. </p>
<img src ="http://www.cppblog.com/yang-yang/aggbug/108577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yang-yang/" target="_blank">杨杨</a> 2010-02-27 23:21 <a href="http://www.cppblog.com/yang-yang/archive/2010/02/27/108577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>