zoukankan      html  css  js  c++  java
  • 编写3ds max插件时遇到的问题总结

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/


    这几天在给公司的美术编写3ds max 2009使用的插件,遇到了一些问题,在此记录一下解决方案



    ## 一、调试3ds max插件的一个小技巧 这个我是参考了其他人的博客:[http://blog.csdn.net/zhengkangchen/article/details/6424806](http://blog.csdn.net/zhengkangchen/article/details/6424806)

    简单来说就是在3ds max sdk提供的接口的基础上再做一层封装,将实际的插件逻辑写在一个新的DLL里,通过动态加载、卸载这个新的DLL,达到不关闭3ds max就更新插件的目的。

    在使用过程中我遇到了一个小问题——卸载DLL时会导致3ds max崩溃,后来发现是因为在DLL中返回了字符串常量指针,导致FreeLibrary之后3ds max继续尝试访问该字符串常量指针时崩溃。
    解决方案是将相应的字符串常量储存到一个静态的string变量中,避免3ds max直接访问DLL中分配的内存。


    ## 二、将布料动画转化为Morpher动画导出 3ds max 2009支持将布料动画转化为关键帧动画,不幸的是这种关键帧动画并不能使用3ds max sdk提供的morpher modifier接口直接导出,因此需要另外使用其他的方法导出。

    解决方案是使用Interface提供的SetTime接口获取每一个采样时间点中模型顶点的位置,再保存为自己所需要的数据格式,这个过程中有几点需要注意:

    1. 每次SetTime之后都要重新初始化IGame,否则会导致获取的数据错乱
    2. 每次SetTime之后都要调用Mesh节点的EvalWorldState接口,更新网格的顶点,否则只能获取到第一次SetTime的数据
    3. 通过这种方式获取的顶点数据是应用网格Position/Rotation/Scale变换之前的顶点数据,如果网格包含相应的空间变换,还需要自行将顶点乘以相应的矩阵
  • 相关阅读:
    勿忘心安
    设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
    P1011 车站
    第一天
    P1134 阶乘问题
    P3152 正整数序列
    某数论
    DO YOU WANNA BUILD A SNOW MAN ?
    luogu P1579 哥德巴赫猜想(升级版)
    紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)
  • 原文地址:https://www.cnblogs.com/dbylk/p/5642735.html
Copyright © 2011-2022 走看看