OIV 之 节点(基于COIN 3D)

 

节点的类型

节点是组成图形场景的基本元素。它内部包含用于定义 3D 形体、属性、或组的数据和

方法。当创建了一个节点,这个节点会被当作根节点自动地保存到场景数据库中。通常的情况下,可以通过将节点与数据库中的其它节点相连接,构造出一种具有分层关系的场景。

 

节点可以分为三大基本类

   形体节点(Shape nodes),代表3D几何模型。

   属性节点(Property nodes),表现对象的外观或其它场景特征。

   组节点(Group nodes),是一种将节点聚合包含进场景中的容器(containers)。 

创建节点

使用 C++ new       操作符来创建一个节点,例如:

 

SoSphere *headSphere = new SoSphere;

注意:不要创建节点数组。(具体原因见后面的怎样删除节点章节)(既不能这样程序,

SoSphere *headSphere = new SoSphere[5]。译者注)

 

注意尽管是使用 new 操作符创建了新节点,但却不能使用 delete 操作符删除它们。

在后面的如何删除节点章节中,将详细讨论如何在 Inventor 中删除节点,以及节点何时

被删除的问题。理解引用计数的原理对于我们使用 Inventor 是至关重要的,因为我们必

须知道在什么样的条件下,节点会被自动删除。

节点里有什么

每个节点都是由一组叫做的用于描述节点参数的数据元素组成的。例如,一个点光源节点(SoPointLight)包含了四个域:intensity(亮度)color(颜色)location(位置)on()intensity里包含有一个从 0.0 (无光) 1.0 (最亮)的变量值。color用于设置光源的红/绿/蓝照明色。location用于指定光源的位置。on指定灯光是否处于开的状态。

Inventor定义了许多的类型。每种域类型都有唯一的方法来访问其数据。在每个节点中,根据域的用途,每个域都被命名了相应的名称。 

当对节点执行动作时发生了什么? (高级内容)

每个节点都会执行自己的动作行为(Each node implements its own action behavior)。当 个特定的动作时,我们必须首先要创建一个动作类的实例,SoGLRenderActionSoGetBoundingBoxAction),然后再将这个动作应用到场景的根节点上。数据库对每个动作都管理着一个叫做遍历状态(traversal state)的数据结构,这个数据结构是在某个给定时刻内动作的元素与参数的集合。通常,当执行一次动作时,动作将按照从上到下,从左到右的顺序遍历整个场景。在遍历的过程中,节点将根据它们对此次动作所做的特定行为来修改遍历状态。

 

本节将集中讨论OpenGL  渲染动作(OpenGL rendering action),因为创建3D场景的最主要动机之一就是为了观察和操作3D对象。渲染遍历状态是由一组可以被给定的节点类修改的元素所组成的。当执行一个渲染动作时,将以指定的方式使用和解释每个元素。下面列出了少数的几种在遍历状态中使用的元素:

       当前几何变换。

   当前的材质成份。

   当前光照模型。

   当前绘制风格。

   当前字体。

   当前坐标系。

   当前法向向量

   当前灯光。

     当前观察方式(Current viewing specification)(主要是定义平行投影,还是透视投影。译

者注

 

举例来说,SoMaterial节点用于设置遍历状态中各种材质元素的当前值,

SoDrawStyle节点用于设置遍历状态中绘制风格元素的当前值。

还有像SoSphere这类的形体节点,对渲染遍历来说是尤其重要的。因为在渲染的时候,这类节点会使用遍历状态的当前参数,将它们自己形状绘制在屏幕上。

 

形体节点

形体节点用于表示一种3D几何对象。它们比较特殊,因为它们代表的是一些受属性节

点和组节点影响的实际物体。在执行渲染动作期间,它们实际上会将自己形状绘制在屏幕上。

形体节点类包括:SoSphereSoIndexedFaceSet    SoText3   等类。

 

 

属性节点

属性节点代表的是像表面材质绘制风格、或几何变换等这些用于展现场景

外观和特有性质的节点。属性节点可以分成若干类,场景图一般使用三种不同的图标来表示它们:

 

   变换类图标:表示执行几何变换的属性节点,像SoTransformSoRotationSoScale

SoTranslationSoRotationXYZ SoResetTransform等节点。这些节点都是从

SoTransformation派生出来的。

   外观类图标:表示可以修改对象外观的属性节点,像SoMaterialSoBaseColor

SoMaterialBindingSoComplexitySoDrawStyleSoLightModel SoFont

    度量类图标:示包含有坐标系、法线、或其它几何信息的节点,像SoCoordinate3

SoCoordinate4SoProfileCoordinate2SoProfileCoordinate3SoNormalSoNormalBinding

 

通常,在遍历过程中,属性节点将自己的新值替换掉在遍历状态中相应元素的值.几何变换节点是一个例外,它们会和当前几何变换进行累积运算。

SoTransform节点可以产生几何变换,它包含有缩放域、旋转域、平移域。下面的代码

定义了一个沿着y轴方向平移-1 单位的几何变换节点。

SoTransform *myXform = new SoTransform;

// set field value

myXform->translation.setValue(0.0 -1.0 0.0);  

为了使这个变换产生效果,这个节点必须要插入到场景的某个适当位置上。(这里是插

在需要平移的形体节点之前)

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值