当前位置: 火魔网 » 媒体动画 » 3DMAX

3D Max一些基本认识

从去年开始到现在用3dmax也快一年了,画图、建模、写插件,用的非常多,但一直却没时间(或者说懒于)整理,昨天正好写完了骨骼动画的插件,趁热打铁整理了一下3DMAX的场景组织和几何管道的方式,以下是潘李亮大师关于场景组织和几何管道的讲解。

(1) MAX的整个场景是一个树状结构,树的节点用INode来表示,整个树的根节点可以通过Interface::GetRootNode来获得,场景中的所有物体都是INode。INode中的NumberOfChildren函数和GetChildNode则用来访问INode的子节点。要遍历整个场景中对象,只需要通过Interface::GetRootNode和GetChildNode做一个递归Ѭ环就可以了。如果仅仅是想获得在视口中选定的物体,则可以使用Interface::GetSelNodes函数。

(2) INode仅仅是一个虚拟的节点,它本身仅仅包含一些标记和变换信息,并不表示实际的Object。实际的Object需要附着在INode上,并以INode的坐标系为Object的本地坐标系。Max中常见的Object有形状(各种参数曲线),Camera,Mesh等。Object有自己的变换矩阵(TM), 在很多情况下这个矩阵都是单位矩阵。

INode的变换矩阵可以通过INode::GetNodeTM来获得,而附着在INode上的Object的变换矩阵则通过 INode::GetObjectTM来获得,因为Object相对于Node的变换矩阵通常是单位矩阵,GetNodeTM和GetObjectTM获得的矩阵通常也是一样的,但是在必要的时候一定要加以区别。关于INode和Object的变换矩阵问题的详细可以参考潘李亮大师的:http://blog.csdn.net/Nhsoft/archive/2005/01/06/241629.aspx

(3) 管道。

前面说过Object是附着在INode上的,在MAX里,Node有一个 Object Reference的指针,指向一个物体对象。熟悉MAX的操作方式的读者都知道,我们在MAX里建立一个对象后,可以在上面添加各种修改器 -Modifier。在Max的几何管道中,我们建立的对象通常称为Base Object。所有施加在这个物体上的修改器形成一个修改器堆栈-ModStack。BaseObject经过这个ModStack后形成一个新的 Object Reference。ModStack中的每个Modifier都是输入一个Object Reference,输出一个Object Reference, 并且在应用第一个Modifier的时候会自动在几何管道里插入一个Derived Object。最终INode的Object Reference将指向这个Derived Object。

Modifier在管道中的应用实例是ModApp对象,一个ModApp代表一个应用在Object上Modifier修改,ModApp包含一个ModContext的数据对象,Modifier用ModContext中的数据来对Object进行修改,以生成最终数据。

修改器按照应用的坐标系不同分成局部空间修改器和世界空间修改器(World Space Modifier)。局部空间修改器仅仅在Object的局部空间中修改Object,不会对坐标系造成影响。世界空间的修改器比如水波纹修改器则要求先将物体变换到世界空间后再进行修改,修改完成后的坐标也是世界空间的坐标。相对来说处理世界空间修改器会麻烦的多。(如果一个物体应用了世界空间修改器,则通过Mesh对象取得的坐标已经是世界坐标系中的了。不需要再乘以INode::GetObjectTM了)。

举个例子。比如在3dmax里建了一个Box对象Box01,那么这个Box在进入管线的时候即为一个Base Object——Box,然后你可以为这个Box添加各种合适的修改器(Modifer),比如Bend,Skin,Physique等等。这些修改器将形成一个修改器堆栈,即ModStack,Base Object经过这个ModStack后将形成一个Object Reference,当第一个Modifer应用的时候会自动地在管线里加入一个Dirived Object,最终INode的Object Reference将指向这个Derived Object。

注意:ModStack中的每个Modifier都是输入一个Object Reference,输出一个Object Reference,比如我们想得到Skin修改器的Modier:

Modifier *GetSkinModifer( INode *pNode ) Object *pObject = pNode->GetObjectRef();
while ( pObject->SuperClassID() == GEN_DERIVOB_CLASS_ID )    IDerivedObject *pDerivedObj = (IDerivedObject *)pObject;
   for ( int iStack = 0; iStack < pDerivedObj ->NumModifiers(); iStack++ )     Modifier *pModifier = pDerivedObj->GetModifier(iStack);
    if ( pModifier->ClassID() == SKIN_CLASSID )
     return pModifier;    //下一个Derived Object
   pObject = pDerivedObj->GetObjRef(); return NULL;
}

首先pNode->GetObjectRef();这个是前面讲的,INode通过GetObjectRef()得到它指的那个Derived Object,随后用一个循环判断pObject是不是GEN_DERIVOB_CLASS_ID,正因为每个Modifier都是输入一个Object Reference,输出一个Object Reference,所以pObject = pDerivedObj->GetObjRef();实质上不断获得其下一个的Object Reference。如此来遍历Mod Stack中的每个Modifier

3D Max一些基本认识相关推荐

  1. 3d max 安装和导入rvt模型失败

    安装3d max 2012: 选择打开,所有文件,看能否打开rvt模型: 打开失败: 选择导入,看一下支持的格式,不包含rvt: 选择 所有文件,找到一个rvt模型,导入,导入失败:如下图:下回再整: ...

  2. 转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友

    看到有人在ps区咨询如何安装3d max教程,当你进行第一步之前,请先断开网络连接 第一步:运行安装程序   第二步:接受安装协议,点击下一步会提示输入序列号   第三步:你会看到已经安装完成了的界面 ...

  3. 3D MAX导出插件编写

    文章版权归博客园 BigCoder所有,转载请于明显位置标明原文作者及出处,以示尊重!! 原文出处:http://www.cnblogs.com/csyisong/archive/2009/09/01 ...

  4. 有谁做过在C# winform里,显示3D max文件的呢?请赐教了。

    有谁做过在C# winform里,显示3D max文件的呢?请赐教了. 转载于:https://www.cnblogs.com/igouz/archive/2009/05/05/3DMax.html

  5. 3D MAX界面操作教程及渲染技巧

    3dmax软件是一款电脑设计辅助软件,广泛应用于建筑设计.室内设计.影视动画.广告设计.游戏设计等等,是三维设计师们不可或缺的一款软件. 这里小编为大家介绍该软件的工作界面,让广大初学者和爱好者有更加 ...

  6. 3d Max人物动画学习笔记(一) 骨骼创建

    1.从溜溜网或爱给网下载免费模型资源,并将其导入到3d Max 2016中 这里如果模型被分为不同的部分可以选中模型,右键转化为--可编辑多边形,并在修改面板中选择可编辑多边形--多边形,附加工具并选 ...

  7. 三维建模软件的插件安装教程——3D Max

    大家在使用三维建模软件3D Max的时候一定遇到过插件不知道如何安装的情况,今天我将把常用插件的类型和扩展名罗列如下方便大家安装收集也算抛砖引玉望各位高手查漏补缺不吝赐教. 3DSMAX的插件名后缀主 ...

  8. 使用3D Max里面自带的门,怎么设置动画并预览

    物体怎么添加门啊?就是怎么开门和关门 @长沙-魁梧的大叔 墙上添加门?还是您自己的柜子要加门? 自己的柜子 不是墙上 那就要自己做柜子门的模型动画了 用什么做?3D max? 一般是的,你喜欢用其它编 ...

  9. 3d Max安装失败(Microsoft Visual C++ 2010 Redistributable)

    安装3d Max失败,如图: 有时候查看日志却什么也看不出来. 这时,可以关闭后重新安装,看看是哪一步出错.在输入序列码的下一步就开始进行安装了,界面如下: 3d Max 是由一个主软件以及多个组件构 ...

最新文章

  1. 2022-2028年中国PET薄膜行业市场深度分析及未来趋势预测报告
  2. 保护云端数据的5个技巧
  3. KB001: 兼容性问题与浏览器的内核及渲染模式
  4. PHP文件包含漏洞原理分析和利用方法
  5. 成语json_cocos creator实战(2)成语小秀才ts版
  6. 计算机2级access,计算机二级-Access-窗体的设计视图
  7. 一天1个机器学习知识点(三)
  8. vue axios全攻略
  9. Powershell-创建Module
  10. 电容降压LED驱动电路
  11. 需求 新建数据表用于演练查询 2128
  12. linux如何压缩磁盘,Linux初级运维(十二)——磁盘及文件系统管理
  13. SQLyog下载地址—Mysql的可视化(建议收藏)
  14. Linux安装redis及redis的php扩展。
  15. 计算机一级插入页眉,计算机一级考试,设置页眉为“汉字的交换码”
  16. 计算机怎么看事件管理,如何打开事件查看器 win7事件查看器打开及使用方法介绍...
  17. Python 用“*” 输出三角形的代码写法
  18. 完美解决 iOS 中只旋转自己想要旋转的屏幕
  19. 【Ubuntu安装后基本配置】
  20. 第二章:计算思维——知识点整理

热门文章

  1. 为了牙齿美白,该不该给百天的小宝宝补充氟化物?
  2. 安焦删除贴 牛人纷纷出现(2)
  3. Python代码写好了怎么运行?
  4. sqlitestudio和mysql_sqlitestudio怎么用 sqlitestudio使用方法图文详解
  5. 几次推广都没能火起来,腾讯直接把微视嵌入朋友圈了?
  6. 码农都该知道的开发工具
  7. 第四章:Android灯光系统(4)-电池灯
  8. javaserver_JavaServer页面简介
  9. Vue2源码解析 虚拟dom简介
  10. 《和平精英》与玛莎拉蒂跨界合作