版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomicyo/article/details/42342985
前言
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 renderer
if (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所有,转载文章请注明出处!