注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

豆芽兵的生存探索

因,记录。留下历史,看到未来...

 
 
 

日志

 
 

022_014_03_Nodes_Data_Types_Vectors(矢量)  

2013-08-17 23:32:41|  分类: RF2013中文帮助 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

022_014_03_Nodes_Data_Types_Vectors(矢量) 

RealFlowVector(矢量)是非常重要的,你会经常接触到这个数据类型。Vector使用一个有向箭头表示:箭头表示方向,长短表示大小。如果说的是力,那么这个大小(magnitude)就被称为强度(strength.每个需要三个值的参数都被考虑成Vector.常见的例子是position(位移), rotation(旋转)或 scale(缩放)。矢量的大小可以使用一个简单的公式来计算,就是对X,YZ方向的三个分量分别计算。

vectorMag = sqr( X2 + Y2 + Z2 )

上面计算结果就不再是一个矢量类型了,是一个浮点型。矢量X,Y,Z分量也是一个浮点型(也称为实数型reals

RealFlow Graph内置提供了很多矢量计算方法。可以它们可以直接从Tab菜单的"Vector"里调用。每一个函数都有一个"Vector3" 前缀,表示矢量由三个分量组成"Vector3Dot" "Vector3Normalize"

"Vector3Module" 结点可以用来直接计算矢量大小。你也不一定非要使用上面的结点,也可以自己定义。

有一个矢量由四个分量构成colour(颜色)。这个矢量由RGB值和Alpha通道组成:

colorVector = ( R, G, B, Alpha )

RealFlow 标准矢量是有三个分量,如下:

Tab 菜单 > Constant > Vector3

右边有 "Input (Vector3_01)" 有三个输入框X, Y Z。请注意这是固定好的,无法改变。

颜色矢量结点在"Constant"组下:

Tab菜单 > Constant > Color4

输入框是由一个黑色区域取代。点击它,会打开一个颜色浏览器,可以直接选择你所需要的颜色。RealFlow 会自动传递选择的RGB值和Alpha通道:

022_014_03_Nodes_Data_Types_Vectors(矢量) - 豆芽兵 - 豆芽兵的生存探索

Working with Vectors (Vector3))(使用矢量)

每次使用矢量时,都会有一个共同的问题。当你看一下矢量结点的"out"端口,只会看到只有一个通道。问题是,要如何提取不同通道的值呢进行计算呢?在下面的练习中Cube物体需要把X和Z轴的值改为1.5,而Y轴保持不变。另外,新的Scale值要在"Messages"窗口显示出来。这个示例展示了RealFlow "Graphs"另一个概念:一个结点可以连接到多个结点——多次调用已经定义过的变量,是非常重要的。

开始建立一个"Cube"模型。得要告诉Graph,这个模型和它的"Scale"参数。它的值是一个矢量。它的值分别代表模型的X,YZ方向的位置。要"载入"模型到Graph窗口,需要使用下面的结点:

Tab 菜单 > Scene Nodes > GetObject

022_014_03_Nodes_Data_Types_Vectors(矢量) - 豆芽兵 - 豆芽兵的生存探索

"Scene Nodes"组包含了很多结点,每一个节点都代表一种特定的类型。 让我们看一下"GetObject" "GetObjects"有什么不同。 "GetObjects"最大的优势是会自动遍历场景然后获取到所有场景对像。这些物体会被存储到一个list(列表中,也称为数组下面一章会有详细描述)。熟悉Python的人应该会理解这个"GetObjects" 结点:

objectList = scene.getObjects()

for object in objectList:

do something here...(做一些操作…)

在大部分情况下,建议你把你想要做的结点图,先在纸上打个草稿,这是非常有帮助的。因为这些描述的思路就是结点图的流程或顺序:

"Get the "Cube01" node's scale, extract the "Scale" parameter's X,Y and Z values. Then, add 1.5 to the X and Z components and rescale the cube. Finally, print out the new scale values."

获得"Cube01"结点的缩放,提取出"Scale"参数的x,yZ值。然把X Z分量加上1.5.最终输出新的缩放值。

(译者注:英文环境下更容易思考。这些参数名称没法翻译。因为这些参数名称正好是以后要用到结点名称)

 

"GetObject"结点是这个结点图的开始点,它 "Input (GetObject_01)" 输入框需要的值是对像名称,可以在这里输入: Cube01"GetObject" 将在稍后添加,因为对像的名称还要用到。还需要这个对像的"Scale" 参数:

Tab 菜单 > Scene Node > GetNodeParameter

再一次,这个结点右边的输入框需要一个名称。这次是参数的名称:Scale.RealFlowGraph系统,参数名称不一定要区分大小写,但我们建议你还是区分大小写的好,因为Python写有很重要的作用,你以后总会要用到的,保持这个好习惯吧。

你可以看到"GetParameter"有两个输入端口 "node" "parameter""node"端口得要连接上。 "GetNodeParameter" 结点上有四个输出端口,代表不同的数据类型和拥有的参数。有一些参数使用integers, floats, vectors, strings甚至是结点 nodes (例如"getMatchingHybridoEmitter"结点). "Scale" "Vector"类型,所有数字类型都由"number" 端口输出。如果你不敢确信你选择的端口,可以使用Graph内置的帮助说明看到这个结点所支持和输出的数据类型。

GetParameter > Right-click(右击) > Description

现在一切都好,但如本章开始前提到的一个问题:怎样调用矢量的分量呢? 现丰,这个结点似乎是把矢量当作一个整体,不能当作分量来处理。要解决这个问题,Vector得要配合使用一个新结点:

Tab 菜单 > Conversion > Vector3ToComponents

这个新结点的"in"端口连接到"GetParameter""number" 端口,另一边你会看到X, Y Z,每一个值有一个输出端口。这个任务中,需要给X Z1.5。为了完成计算,还需要一个"Real" 和两个 "Add"结点。 这个计算思路与"计算乘法"那个示例是完全一样的。但使用同一个"Real"结点输出不同"Add"结点上。所以,已经声明过的变量可以多次调用。下图显示了最终结点图:

022_014_03_Nodes_Data_Types_Vectors(矢量) - 豆芽兵 - 豆芽兵的生存探索

这样简单改变单个物体缩放,对Graph来说有点大材小用。但如果有几百上千个对像,Graph也是可以快速处理完成。这就需要使用到循环(loop.可以在下面的章节("Working with Colour Vectors (Vector4)"示例)看到关于使用循环的方法:

 

  评论这张
 
阅读(452)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017