您的位置:首页 > Web前端 > Node.js

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

2017-07-19 14:57 549 查看
 在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的相关信息。

INode::IsRootNode() - 判断节点是否是root节点 (root节点没有父节点).
INode::GetParentNode() - 返回节点的父节点
INode::NumberOfChildren() - 得到节点的孩子节点数量
INode::GetChildNode() -返回指向第n个孩子节点的指针
INode::GetName() - 返回该节点对应的场景object的名字
INode::GetObjectRef() - 返回指向场景object对应节点的指针
INode::GetNodeTM() - 返回场景节点对象给定时间的PRS信息
3ds Max调用 SceneExport::DoExport()函数去做主导出工作。3ds Max负责文件选择界面并且提供文件名称调用函数SceneExport::DoExport()。我们可以定义实现一个递归:私有的成员函数去帮助我们导出Scene Graph信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  3dMax 插件