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信息。
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信息。
相关文章推荐
- 3ds Max插件开发(三)The Scene Graph and Nodes 场景节点
- 3ds Max插件开发(五)The Reference System参考系统
- 3ds max插件学习 VS2010 中 开发 3ds max 内置用户界面
- 3ds max 导出插件开发后记
- 3ds Max插件开发(八)编写.Net Plug-ins
- 学习3ds max插件开发过程中的一些小结
- 3DS Max 2010简单导出插件开发(实例开发)
- 3DS Max 2010简单导出插件开发(实例开发)
- 使用JavaScript展开/折叠TreeView中所有节点(Expand and Collapse All Nodes of asp.net Treeview on the client with javascript)
- 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》
- 3ds Max插件开发(二)官网上的Sample utility plug-in
- 3ds Max插件开发(一)Wizard 安装
- 一步步开发一个通用型的3ds max模型导出插件
- 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》
- 3DS MAX插件开发(1)——开发环境配置
- 3ds max插件开发入门(1):3ds max sdk与开发环境的配置
- 【原】用使用JavaScript展开/折叠TreeView中所有节点(Expand and Collapse All Nodes of asp.net Treeview on the client with javascript)
- 3D for the Web : Interactive 3D animation using 3ds max, Flash and Director
- [导入]参考OpenSceneGraph的3ds插件学习lib3ds
- 3ds max 导出插件开发后记