热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3dsMax插件开发(四)TheSceneGraphandNodes场景节点

在3dsMax场景视图中可以由用户创建并操纵的的object被称为sceneobject,sceneobjects继承object类。sceneobject一般有geometricobje

 在3ds Max场景视图中可以由用户创建并操纵的的object被称为scene object,scene objects继承object类。scene object一般有geometric objects (GeomObject), lights (LightObject), cameras (CameraObject), particles,以及world space modifiers (不与常规的 modifiers混淆)。scene object拥有来自层级和用户组合对象的父子继承关系,所以父对象的Transforms也会传递给子对象。你可以在3ds Max线上参考Animation > Hierarchies and Kinematics > Hierarchies,从用户角度查看scene object之间的父子关系。想要了解modifier栈中的 scene graph 节点间的关系,参考阅读Pipeline Overview 。

3ds Max使用了一个名叫Scene Graph的数据结构,来存储scene object信息以及object间的关系信息。在Scene Graph上的每一个节点INode实例对应场景中的每一个object。每一个INode实例带有其对应的场景中的object的相关信息:包括但不仅限于一个指向该scene  object的指针、一连串的子节点、父节点和子节点的地址、object的位置+角度+大小(PRS) transform controllers、应用于object的材质信息等。注意Scene Graph上的节点不是真正的场景中的scene object,但是节点凭借指向该scene object的指针得到该scene object,然而scene object其本身是没有任何 PRS transform controllers、材质、与其他scene object关系等等属性信息的。

Scene Graph的边是有向边,在3d Max中被称为link链接。只要A节点的状态(PRS、材质等)依赖于B节点,就会由A链接至B。每一个节点可以被很多object跟随或链接,但是自己只能链接一个object。不允许循环的链接节点。这些节点一起组成了Scene Graph一个树形结构。这棵树的root节点是一个虚拟节点,没有被任何节点链接(这是唯一的例外)。映射场景中独立的、并且在场景中没有父object的object的那些节点,用这些节点作为场景树的第一层节点。即使他们的object被类实例化了,场景中的object也不会展示在场景视图中,除非他们映射Scene Graph中的节点。

INode 类是3ds Max SDK中非常重要的类,并且由大量的成员函数。你可以参考开发指南 Scenes and Nodes 或者 C++ API 中的INode类。

调用函数Interface::GetRootNode()使用场景树的root节点。一旦得到了指向root节点的指针,就可以通过这个指针可以得到对应场景object的相关信息。

  1. INode::IsRootNode() - 判断节点是否是root节点 (root节点没有父节点).
  2. INode::GetParentNode() - 返回节点的父节点
  3. INode::NumberOfChildren() - 得到节点的孩子节点数量
  4. INode::GetChildNode() -返回指向第n个孩子节点的指针
  5. INode::GetName() - 返回该节点对应的场景object的名字
  6. INode::GetObjectRef() - 返回指向场景object对应节点的指针
  7. INode::GetNodeTM() - 返回场景节点对象给定时间的PRS信息
3ds Max调用 SceneExport::DoExport()函数去做主导出工作。3ds Max负责文件选择界面并且提供文件名称调用函数SceneExport::DoExport()。我们可以定义实现一个递归:私有的成员函数去帮助我们导出Scene Graph信息。


推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
手机用户2502853443_910
这个家伙很懒,什么也没留下!