Havok Xtra帮助文件.docx

上传人:b****6 文档编号:7225425 上传时间:2023-01-22 格式:DOCX 页数:10 大小:21.44KB
下载 相关 举报
Havok Xtra帮助文件.docx_第1页
第1页 / 共10页
Havok Xtra帮助文件.docx_第2页
第2页 / 共10页
Havok Xtra帮助文件.docx_第3页
第3页 / 共10页
Havok Xtra帮助文件.docx_第4页
第4页 / 共10页
Havok Xtra帮助文件.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Havok Xtra帮助文件.docx

《Havok Xtra帮助文件.docx》由会员分享,可在线阅读,更多相关《Havok Xtra帮助文件.docx(10页珍藏版)》请在冰豆网上搜索。

Havok Xtra帮助文件.docx

HavokXtra帮助文件

HavokXtra简介

HavokXtra是MacromediaDirector的一个完全整合的刚体物理模拟引擎。

HavokXtra提供对物理属性和事件的全面接口,便于你对模拟世界的完全控制。

它使你能够对物理物体的属性赋值(例如质量和弹力)施加力量、推力或转力矩,以及设定速度和动力。

你也能记录特定的刚体碰撞,或甚至完全使碰撞失效。

支持输入HavokHKE(HavokExporter)文件,HavokHKE文件支持在3D建模工具(例如3dsmax)中构建的完全的物理场景而无需编写额外的Lingo脚本。

HavokXtra自带一个行为库以简化物理场景的创建,此外还附有一系列的产品演示以展示其引擎的许多强大特性。

Havok演员包含将一个静态3D世界变成一个动态物理模拟场景所需的全部信息。

每个Havok演员被连接到一个Director演员。

当动态场景被视为一个3D精灵时,无需从一个Havok演员直接创建精灵。

在设置和更新一个Havok控制的3D场景时有一系列进程。

✓Initializationincludingcreationofrigidbodies.初始化包括刚体创造。

✓将外部输入例如力量,转力矩应用于模拟。

✓下一步——运行模拟,将场景带入一个新的天地。

✓关闭。

这个快速入门包括HavokXtra的核心功能。

它假设用户基本了解MacromediaDirector和Lingo脚本语言。

按照快速入门,我们可以创建一个具备物理属性的简单场景,并介绍其主要的建筑组成。

欲获得更多的使用HavokXtra的信息,请参考在HavokXtradeveloper站点上的HavokXtraLingo参考手册、HavokXtra行为参考手册以及大量其它文档。

.使用HavokXtra创建物理模拟有三个方法。

✓使用W3D和HKE文件:

从外部3D建模工具将3D场景输出为W3D文件,将物理数据输入为HavokHKE文件。

这样不需要额外的Lingo脚本。

✓使用一个W3D文件:

使用一个在外部3D建模工具创建并保存为W3D文件的Shockwave3D演员,在Shockwave3D场景中将Havok刚体和3D模型关联。

✓通过Lingo:

动态3D场景中的全部信息均由Lingo创建。

以下假设已经在外部3D建模工具中创建了一个场景,并分别输出了呈现3D参数和物理参数的W3D和HKE文件。

欲获得此操作的更多信息,请参考Shockwave3DExporter和HavokExporter文档。

首先输入3D场景:

✓打开File菜单。

✓从File菜单选择Import。

✓从对话框选择需要的Shockwave3D(W3D)文件。

以上将3D演员加入演员表,其后可以将演员拖入舞台。

现在输入必需的Havok演员:

✓打开File菜单。

✓从File菜单选择Import。

.

✓从对话框选择需要的HavokExport(HKE)文件。

以上将Havok演员加入演员表。

在当前舞台播放影片将会展现一个静态世界。

为创建动态世界,应对Havok模拟进行初始化并与3D场景关联。

拖拉Physics(HKE)行为(位于Havok>Setup行为库)于呈现3D场景外观的精灵上可以达成上述目的——确定Havok演员参数被设置为HavokPhysicsScene演员的名称。

该行为对Havok模拟进行初始化(将3D物体和HKE文件的刚体关联)。

影片的每帧之后,该行为在物理模拟中推动时间的进度,并在物理控制下更新3D物体的位置和方位。

当该行为被拖拉于舞台上时,你可以设置其它参数,但是采用默认值通常最佳。

Atthispo此时,为实现额外的物理效果,可将其它行为拖入舞台上。

例如,拖拉MoveModel行为(位于Havok>Control行为库)于舞台上,选择WhichModelparameter参数为"AnyModel"。

而后拖拉一个MouseLefttrigger(位于3D>Triggers行为库)于舞台上之上,将此trigger与MoveModel行为(在SelectaGroupanditsAction参数中可选择)关联。

现在就可以用鼠标指针和左键在场景中选择并移动3D模型了。

以下没有采用可被输入的HavokExport(HKE)文件。

因此物理数据必须由Lingo提供或由3D场景直接获得。

首先我们输入3D场景:

✓打开File菜单。

✓从File菜单选择Import。

✓从对话框选择需要的Shockwave3D(W3D)文件。

以上将3D演员加入演员表,其后可以将演员拖入舞台。

创建空的Havok模拟:

✓打开Insert菜单。

✓从Insert菜单选择MediaElement。

✓从MediaElement子菜单选择HavokPhysicsScene。

以上把一个空的Havok演员加入演员表。

现在把一个物理(没有HKE)行为加入演员表(位于Havok>Setup行为库)。

在当前舞台播放影片将会展现一个静态世界,也就是|我们没有在W3D文件中将任何的刚体与3D模型关联。

现在我们需要藉由编辑物理(没有HKE)行为产生Havok模拟数据。

以下的Lingo函数创建了两个加入到Havok模拟并与两个W3D文件中的3D模型关联的刚体:

"Box01"和"Text01"。

前者是一个固定的球形刚体,也就是在模拟时可能无法移动。

后者是一个可动的凹面物体。

以下函数的详情,请参阅HavokXtraLingo参考手册。

oncreatescene

s=member("HelloWorld")

hk=member("BlankHavok")

--创建平面

m=s.model("Box01")

m.addModifier(#meshdeform)

hk.makeFixedRigidBody(m.name)

--创建文本

m=s.model("Text01")

m.addModifier(#meshdeform)

hk.makeMovableRigidBody(m.name,100.0,false)

end

除了创造刚体,在此我们也可以调整他们的默认物理参数。

运行电影将产生一些物理动画(也就是"Text01"物体在地心引力作用下下落)。

以下没有采用可被输入的HavokExport(HKE)文件和Shockwave3D(W3D)文件。

因此显示和物理数据必须由Lingo直接创建。

首先,创建空的3D场景:

✓打开Insert菜单。

✓从Insert菜单选择MediaElement。

✓从MediaElement子菜单选择Shockwave3D。

以上将3D演员加入演员表,其后可以将演员拖入舞台。

创建空的Havok模拟:

✓打开Insert菜单。

✓从Insert菜单选择MediaElement。

✓从MediaElement子菜单选择HavokPhysicsScene。

ThisaddsanemptyHavokcast以上把一个空的Havok演员加入演员表。

现在把一个物理(没有HKE)行为通过拖上舞台而加入演员表(位于Havok>Setup行为库)——确定Havok演员参数被设置为HavokPhysicsScene演员的名称。

现在我们需要从头创建物理和3D场景。

以下的Lingo函数为场景创建3D模型,随后是刚体。

此种情况下,原始的地面和文本刚体实际上是按轴对称的网格物体创建的。

oncreateScene

s=member("BlankScene")

hk=member("BlankHavok")

txt=member("Text")

s.resetWorld()

--创建平面

mr=s.newmodelresource("GroundPlaneRes",#box)

mr.width=150

mr.length=50

mr.height=100

m=s.newmodel("GroundPlane",mr)

m.transform.rotation=vector(-90,0,0)

m.transform.position=vector(0,250,-200)

m.addModifier(#meshdeform)

hk.makeFixedRigidBody(m.name,true,#box)

--对准摄影机

c=s.camera[1]

c.transform.position=vector(50,-50,-100)

c.pointat(m.transform.position+vector(0,0,50),vector(0,0,1))

c.hither=1

c.yon=1000

--创建文本

txt.text="HelloWorld"

mr=txt.extrude3D(s)

mr.bevelType=1

mr.bevelDepth=0.1

mr.smoothness=6

m=s.newModel("Text",mr)

m.transform.position=vector(-75,250,0)

m.transform.rotation=vector(90,0,0)

m.addModifier(#meshdeform)

hk.makeMovableRigidBody(m.name,1000.0,true,#box)

end

我们将以一个新的影片开始(File>New>Movie或Ctrl+n)。

每个影片需要一个演员表。

我们的影片将由一个3D场景和它的物理呈现所组成。

使用Insert菜单增加一个空白的HavokPhysicsScene演员:

Insert>MediaElement>HavokPhysicsScene。

使用Insert>MediaElement>Shockwave3D增加一个空白的Shockwave3D演员。

拖拉Shockwave3D演员于舞台上创建一个精灵。

当前我们的3D场景是空的。

我们现在将用一些简单的物体将其组建起来。

这可由一个简单的Lingo脚本来完成。

使用主菜单的Window>Inspectors>Behavior,打开+图标并选择NewBehavior以增加一个新的行为。

拖拉此新行为于3D精灵上。

把下列本文加入新创建的Lingo行为。

这个脚本创建一个由二个盒子和一个球体组成的简单场景。

propertyw,hk

onbeginSpriteme

hk=member

(1)

w=member

(2)

hk.initialize(w,0.1,1)

createVisibleObjects()

createPhysicalObjects()

end

oncreateVisibleObjectsme

--创建长方体

mr=w.newModelResource("TheBoxRes",#box)

mr.width=2

mr.height=2

mr.length=2

m=w.newModel("TheBox",mr)

m.transform.rotation=vector(0,5,0)

m.transform.position=vector(0,0,10)

--创建球体

mr=w.newModelResource("TheBallRes",#sphere)

mr.radius=1

m=w.newModel("TheBall",mr)

m.transform.position=vector(0,0,5)

--创建平面

mr=w.newModelResource("TheGroundRes",#box)

mr.width=15

mr.height=10

mr.length=1

m=w.newModel("TheGround",mr)

--对准摄影机

c=w.camera[1]

c.transform.position=vector(0,20,20)

c.pointat(m.transform.position+vector(0,0,5),vector(0,0,1))

c.hither=1

c.yon=1000

w.directionalPreset=#bottomLeft

end

oncreatePhysicalObjectsme

--长方体

m=w.model("TheBox")

m.addModifier(#meshdeform)

rb=hk.makeMovableRigidBody(m.name,50)

--球体

m=w.model("TheBall")

m.addModifier(#meshdeform)

rb=hk.makeMovableRigidBody(m.name,100)

rb.restitution=1

rb.friction=0

--平面

m=w.model("TheGround")

m.addModifier(#meshdeform)

rb=hk.makeFixedRigidBody(m.name)

end

HavokXtra的语句是以粗体突出显示的。

以上函数和属性的细节请参阅HavokXtraLingo参考手册。

在此我们仅简单介绍。

每个物理模拟场景一定被关联到一个可视的3D等价物体。

为创建此关联,hk.initialize()函数为Shockwave3D演员呈现一个可视的场景提供了一个参考示例。

提示:

在与我们的物理模拟有关的任何其他的行为能预先作用之前,hk.initialize()应首先被调用。

在初始化之后,脚本创建了许多在场景中可视的3D模型。

一旦创建完毕,控制这些模型并赋予它们物理属性——设置刚体则变得可能。

在createPhysicalObjects函数中,我们将"TheBox"和"TheBall"物体设置为刚体。

可移动刚体有一个块,可以自由移动、反弹和旋转。

"TheGround"被创建为一个固定刚体,不会移动而且不会被撞击它的物体所影响。

在此我们已经创建了一个简单的物理3D场景。

然而,如果播放影片,舞台精灵仍然呈现一个静态的场景。

这是因为在每一帧中,物理模拟应前进。

HavokXtra将其视为步进,并提供一个Lingo函数以运行此动作。

onexitFrameme

hk.step()

end

onendSpriteme

hk.shutdown()

w.resetWorld()

end

将上述语句加入你的行为脚本。

在每一帧结束而影片尚未前进至下一帧时,对步进函数的调用(hk.step)将预先作用。

这导致模拟计算每个模型的新位置和方位。

这意味着在新的一帧开始时,舞台精灵的模型将被重绘。

此外,当影片停止而我们未重设3D场景为原始空白状态前,也需要关闭物理模拟。

既然我们的场景设置为物理精确样式,我们则可以开始控制它并使其相互作用。

HavokXtra提供特效函数以作用于不同的刚体。

刚体可以直接的(经由多种"…MoveTo"函数)或间接的(经由应用力量、推力或转力矩的模拟)改变他们的位置和方向。

除了这些标准函数,HavokXtra也以缓冲器和弹簧的形式提供完全和简单的限制。

与真实世界一样,弹簧也有其静止长度、弹力和作用。

缓冲器使人联想到限制器。

直线缓冲器限制刚体位置。

缓冲位置可能被限制在场景中一个具体的点或相对于另一个刚体的偏移点。

后一种限制方式,会允许类似于刚体链的产生。

角度缓冲器限制刚体旋转。

这意谓着一个长方体的方位可能被限制,以便其平衡一个拐角等类似情况。

我们现在将改变我们的当前场景,以使它比一个长方体于一个球体上下落的场景更有趣些。

可增加一个直线缓冲器以限制长方体模型的位置,而仍然允许它旋转。

此外,可增加一个强有力的弹簧,关联于球体模型与锁定位置的长方体之间。

此弹簧可不断地引起球体碰撞长方体,从而产生有趣而杂乱的交互作用。

oncreateDashpotme

worldPoint=w.model("TheBox").transform.position

dashpot=hk.makeLinearDashpot("DashpotName","TheBox",worldPoint)

dashpot.strength=1000

dashpot.damping=100

end

oncreateSpringme

spring=hk.makeSpring("SpringName","TheBox","TheBall")

spring.restLength=3.5

spring.elasticity=10000

spring.damping=1

end

以上为创建直线缓冲器和弹簧的Lingo脚本。

将其加入行为脚本。

此外,于物理物体创建之后在beginSprite里调用这二个新函数。

运行影片,将出现类似于以上舞台的情景。

除刚体的位置和方位之外,HavokXtra可提供大量的刚体参数。

我们可随时获得刚体的速度,或了解刚体被施加了多大力量。

我们也可获得有关刚体碰撞的参数。

为完成我们的示例场景,我们将增加一段Lingo脚本语句,使每一次球体撞击长方体时都播放声音。

代码包括两段。

首先我们应告知HavokXtra我们关注的是球体刚体和长方体刚体之间的碰撞。

onbeginSpriteme

w=member(3)

hk=member(4)

w.resetWorld()

hk.initialize(w,0.1,1)

createVisibleObjects()

createPhysicalObjects()

createDashpot()

createSpring()

hk.registerInterest("TheBox","TheBall",10,0,#collision,me)

end

以上脚本展现beginSprite函数的最终版本。

粗体显示的语句是关注碰撞的地方。

当在"TheBox"和"TheBall"之间发生碰撞时,第二段代码(碰撞函数)将被调用。

以下是碰撞函数的脚本。

提示:

以下的代码假设要播放的声音文件存储为影片演员"Sound"。

oncollisionme,details

sound

(1).volume=integer(255/power(details[5],1.1))

sound

(1).play(member("Sound"))

end

如场景一样,此碰撞callback函数接受一个称为"details"的参数。

此参数包含有关碰撞的全部已知数据,包括有关的刚体名称、碰撞发生的点位和碰撞的相对方位。

最终传给callback的数据是表现碰撞强劲程度的一个变量。

以上例子中我们使用此变量给我们要播放的声音赋值。

这意味着球体碰撞长方体越强劲,声音越大。

示例场景只涉及了HavokXtra的基础。

当经由Lingo脚本创建全部内容变得不切实际时,也可从一个3D建模工具中输出HavokPhysicsScene(.HKE)文件并将其作为一个演员输入。

这类似于能从许多的3D建模工具中输出的Shockwave3D(.W3D)文件。

这允许极端地物理精确3D场景的高速创建。

欲获得3D建模工具插件的详情,请参阅Havok网站。

与输出支持一样,创建了许多的行为。

可以获取这些行为并象任何MacromediaDirector的内部可用行为一样使用。

它们由两部分组成:

设置和控制。

设置行为包含在快速入门中讨论的基本功能。

当其他行为处理刚体或弹簧和缓冲器创建时,Physics(HKE)和Physics(NoHKE)行为处理初始化、步进和关闭。

控制行为提供了与物理模拟场景进行更多复杂交互的示例。

例如,移动模型介绍经由鼠标操纵刚体,而驱动模型允许象开车一样控制任何刚体。

所有这些行为可以根据你的需要使用、研究和修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1