【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
- 【Maya插件开发】开发自定义模型导出器和渲染视口
- Maya插件开发入门
- Maya API开发【2】硬件渲染节点
- MAYA 插件开发 开发环境配置
- Maya开发
- Maya API开发【1】自定义图形
- 开博第一遍,关于Maya插件开发的文档和书籍
- eclipse插件开发(导出插件,安装插件)
- jquery 自定义插件开发
- jquery 自定义插件开发
- cordova开发自定义插件
- maven 自定义插件开发
- Cordova 开发自定义插件
- cordova开发自定义插件
- cordova开发自定义插件
- cordova开发自定义插件
- maven 自定义插件开发
- Ionic开发自定义插件
- Linux pipe函数
- EF - 不觉得我讲话很搞siao吗?
- day06_java二维数组++面向对象
- jsp中将导航栏部分、主体部分、页脚部分分隔开
- 产品经理之论功行赏
- 【Maya插件开发】开发自定义模型导出器和渲染视口
- jdk集合源码之ArrayList
- 高级图形编程(基于opengl)4
- Leetcode题目索引
- GetStr: 一个自创蛮有用的字符串函数~
- shell脚本if和switch语句编写案例
- Linux下查看某端口的网络数据
- Java方法的参数传递
- codeforces #496D# Tennis Game(二分lower_bound)