【Maya插件开发】开发自定义模型导出器和渲染视口

来源:互联网 发布:银行家算法详解request 编辑:程序博客网 时间:2024/05/17 21:49


前言


Maya作为一款3D建模软件,受到大多数游戏建模师和CG工作者欢迎。Maya所有的概念都建立在“节点”之上,Maya的GUI之所以能够跨平台,是采用了流行的Qt Gui框架完成的,因此,为用户(3D游戏建模师)开发插件的UI除了使用MEL脚本外,也可以直接使用Qt C++进行开发。Maya安装完成之后,自带了devKit和示例,上手比较简单。

遍历Maya场景节点




模型导出器(Translator)


模型文件导出器只要实现上图中需要override的函数即可。


定制渲染器(Viewport)



同理,Maya渲染视口插件也只需实现需要override的函数即可。


注册/反注册插件


注册插件需要实现MStatus initializePlugin( MObject obj )方法

    MStatus   status = MStatus::kFailure;    MFnPlugin plug(obj, MAYA_PLUGIN_COMPANY, MAYA_PLUGIN_VERSION, MAYA_PLUGIN_REQUIREDAPI);gRenderer = new Mk3dRenderer();if (gRenderer){status = gRenderer->registerRenderer();if (status != MStatus::kSuccess){status.perror("Failed to register Kaleido3D renderer properly.");}}status = plug.registerFileTranslator(MAYA_TRANSLATOR,                "none",                DCTranslator::creator    <span style="white-space:pre"></span>);if (status != MStatus::kSuccess){status.perror("Failed to register Kaleido3D Translator properly.");}return status;


反注册插件需要实现MStatus uninitializePlugin( MObject obj )方法

        MFnPlugin plug( obj ); MStatus   status = MStatus::kSuccess;// Deregister the rendererif (gRenderer){status = gRenderer->deregisterRenderer();if (status != MStatus::kSuccess){status.perror("Failed to deregister Kaleido3D renderer properly.");}}gRenderer = 0;status = plug.deregisterFileTranslator(MAYA_TRANSLATOR);if (status != MStatus::kSuccess){status.perror("Failed to deregister Kaleido3D Translator properly.");}

上面两个方法需要在编译的时候导出符号,见第4小节。

用CMake创建Maya插件工程


关键代码如下
set(MAYA_PLUGIN_NAME "MayaDCC")set(MAYA_DIRECTORY "C:\\Program Files\\Autodesk\\Maya2015")set(MAYA_HEADERS_DIR "${MAYA_DIRECTORY}/include")set(MAYA_LIBRARY_DIR "${MAYA_DIRECTORY}/lib")include_directories(.${MAYA_HEADERS_DIR})link_directories(${MAYA_LIBRARY_DIR})set(LIBRARIES Foundation.lib OpenMaya.lib OpenMayaAnim.lib OpenMayaUI.lib OpenMayaRender.lib)set(MAYA_DEFINITIONS _MBCS NT_PLUGIN REQUIRE_IOSTREAM _BOOL)add_library(${MAYA_PLUGIN_NAME} SHARED ${PLUGIN_SRCS})target_link_libraries(${MAYA_PLUGIN_NAME}${LIBRARIES})set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES COMPILE_DEFINITIONS "${MAYA_DEFINITIONS}")set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES OUTPUT_NAME "${MAYA_PLUGIN_NAME}")set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES LINK_FLAGS "/export:initializePlugin /export:uninitializePlugin")set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES SUFFIX ".mll")



     本文版权DsoTsin所有,转载文章请注明出处!


参考

[1] OpenGL Insights. An OpenGL-Friendly Geometry File Format and Its MayaExporter



0 0
原创粉丝点击