3ds Max插件开发(四)The Scene Graph and Nodes 场景节点

 在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信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值