Havok 物理引擎教程
- 格式:doc
- 大小:87.50 KB
- 文档页数:15
物理引擎Havok教程(一)搭建开发环境网上关于Havok的教程实在不多,而且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望能够帮到读者。
这是第一期。
一、Havok物理引擎简介Havok引擎,全称为Havok游戏动力开发工具包(Havok Game Dynamics SDK),一般称为Havok,是一个用于物理系统方面的游戏引擎,为电子游戏所设计,注重在游戏中对于真实世界的模拟。
使用碰撞功能的Havok引擎可以让更多真实世界的情况以最大的拟真度反映在游戏中。
开发商Havok成立于1998年,目前Havok物理引擎被超过200款游戏使用,许多电影也应用了这家公司的软件技术。
2007年9月Havok被Intel收购,为了和NVIDIA的PhysX竞争,Intel在去年的(08年)免费开放了Havok的Physics和Animation组件,内容包括Havok SDK库、样例、技术文档以及支持Maya、3ds Max和Avid XSI等3D建模软件的格式转换工具。
按照Havok的授权文档,即使使用它开发商业游戏也是不需要付费的,这对国内的爱好者应该是一个好消息。
同PhysX相比,个人觉得,Havok无论在稳定性还是功能上,都要略胜一筹。
NVIDIA 的PhysX在硬件加速上,暂时领先,但随着AMD加入到Havok硬件加速的开发,未来Havok 的功能肯定会更加的强大。
二、Havok开发环境的搭建1.安装SDK首先,到Havok的官网下载SDK,/sites/havok/,填写自己的姓名和邮箱,注册后即可下载。
Content Tools是内容工具,包括一些3D建模软件的导出工具。
Behavior Tool是给游戏美工或设计师用的角色编辑工具,具有所见即所得的功能。
对程序员来讲最重要的就是SDK了,我下载的是6.0.0这个版本。
因为Intel只开放了物理和动画两个组件,所以下载的SDK是只包含这两个组件,其他的如布料(Cloth)和破坏(Destruction)还是需要付费才能使用。
学习Unity3D游戏物理引擎的基本操作一、介绍Unity3D游戏物理引擎Unity3D游戏物理引擎是一款强大的工具,用于开发2D和3D游戏中的物理模拟和交互效果。
它提供了各种物理特性,如重力、碰撞检测、刚体模拟等,使得游戏开发者可以轻松地创建真实、逼真的物理效果。
二、创建物体和设置物理属性在Unity中,创建物体并设置其物理属性是使用物理引擎的第一步。
通过在场景视图中点击右键,可以选择创建一个新的游戏对象或复制现有的对象。
然后,可以在检查器窗口中调整新创建对象的物理属性。
2.1 设置刚体属性刚体是物理引擎中的基本单元,它具有质量、速度、角度等属性。
在检查器窗口中,选择一个游戏对象,然后点击"Add Component"按钮添加一个Rigidbody组件,即可将刚体属性添加到该物体上。
通过调整质量、重力和碰撞检测等属性,可以控制物体的行为和交互效果。
2.2 设置碰撞体属性碰撞体用于检测物体之间的碰撞。
在检查器窗口中,选择一个游戏对象,点击"Add Component"按钮,并选择"Physics/Collider",即可添加碰撞体组件。
根据具体需求,可以选择合适的碰撞体类型,如Box Collider、Sphere Collider等,并设置碰撞体的大小、形状和碰撞属性等。
三、物理效果的实现通过使用Unity3D游戏物理引擎,可以实现多种常见的物理效果,如重力、力的作用和碰撞反应等。
3.1 重力效果通过将物体的刚体属性设置为受重力影响,可以实现重力效果。
选择一个具有刚体属性的游戏对象,在检查器窗口中勾选"Use Gravity"选项,即可让物体受到场景中的重力影响。
3.2 力的作用通过在脚本中调用刚体的AddForce方法,可以实现对物体施加力的作用。
例如,可以创建一个脚本,在Update函数中添加代码rigidbody.AddForce(Vector3.forward * force),即可将力施加到物体上,使其沿着正前方移动。
游戏开发中物理引擎的使用方法及优化技巧在游戏开发中,物理引擎起着至关重要的作用。
物理引擎是一种模拟和计算物体运动、力和碰撞的工具,能够为游戏增加真实感和交互性。
本文将介绍游戏开发中物理引擎的使用方法及优化技巧,帮助开发者更好地应用物理引擎并提升游戏性能。
一、物理引擎的使用方法1.选取适合游戏需求的物理引擎市面上有许多物理引擎可用,如Unity中的PhysX、Havok等,选择一个适合游戏需求的物理引擎非常重要。
不同物理引擎具有不同的特点和性能表现,可以根据游戏类型和平台选择最适合的物理引擎。
2.理解物理模拟的基本概念在使用物理引擎之前,开发者需要了解物理模拟的基本概念,包括重力、力、质量、碰撞等。
这些概念的理解对于正确应用物理引擎至关重要。
3.创建游戏对象和物理刚体在游戏中,需要给物体应用物理效果时,可以创建物理刚体组件。
物理刚体可以实现物体的运动和碰撞效果。
通过调整物理刚体的属性,如质量和弹性系数等,可以调控物体的物理行为。
4.使用碰撞检测和响应机制物理引擎还提供了碰撞检测和响应的功能。
通过使用刚体的碰撞器组件,可以检测物体之间的碰撞,并触发相应的事件。
开发者可以根据需要编写碰撞回调函数,实现游戏中的碰撞效果。
二、物理引擎的优化技巧1.使用合理的物理模拟步长物理引擎在每一帧中进行物理模拟计算,使用合理的物理模拟步长对于性能优化至关重要。
如果步长过长,可能会导致物理模拟不准确;如果步长过短,会增加计算负担。
开发者可以根据游戏的需求和性能要求,选择合适的物理模拟步长。
2.使用刚体休眠技术在游戏中,许多物体是静止不动的,为了提高性能,可以使用刚体休眠技术。
当物体静止一段时间后,物理引擎会自动将其设为休眠状态,不再进行物理模拟计算。
这样可以减少计算量,提高游戏的性能。
3.合理使用碰撞体积和形状物理引擎的碰撞检测和响应是非常消耗性能的操作,为了提高性能,可以合理使用碰撞体积和形状。
减少不必要的碰撞体积和形状,可以降低碰撞检测的复杂度,提升游戏的性能。
游戏开发中基于Unity的物理引擎使用教程Unity是一款强大的游戏开发引擎,其内置的物理引擎使开发者能够轻松地实现真实的物理效果。
在这篇文章中,我们将探讨Unity中基于物理引擎的使用教程,帮助您了解如何在游戏开发中利用物理引擎创建逼真的物理效果。
一、物理引擎的基本概念在介绍如何使用Unity中的物理引擎之前,我们首先需要了解一些基本概念。
物理引擎是一种模拟现实世界中物体运动和互动的工具,它可以模拟重力、摩擦、碰撞等物理效果。
Unity中的物理引擎主要基于 Newtonian Physics (牛顿物理学)。
二、启用物理引擎在Unity中,启用物理引擎非常简单。
首先,确保您的场景中存在一个用于运行物理模拟的物理空间,可以在Hierarchy面板中创建一个Empty Game Object作为容器。
然后,在Inspector面板中,点击“Add Component”按钮,选择“Physics”中的“Rigidbody”组件,并将其添加到物理空间对象上。
三、刚体和碰撞体在Unity中,物理引擎中的物体主要分为两种类型:刚体和碰撞体。
刚体是受物理引擎控制的对象,具有质量、位置和速度等属性。
刚体之间的相互作用可以通过碰撞来实现。
碰撞体是用来检测碰撞的组件,可以与其他碰撞体进行互动。
四、使用刚体组件为了让物体受到物理引擎的控制,需要给物体添加刚体组件。
选择你想要添加刚体的游戏对象,在Inspector面板中点击“Add Component”按钮,选择“Physics”中的“Rigidbody”组件。
刚体组件有一些可调节的属性,可以根据需求来设置。
例如,我们可以设置物体的质量、是否受到重力影响以及是否可以旋转等。
通过调整这些属性,我们可以创建不同的物理效果。
五、使用碰撞器组件为了让物体能够检测碰撞和互动,需要给物体添加碰撞器组件。
选择你想要添加碰撞器的游戏对象,在Inspector面板中点击“Add Component”按钮,选择“Physics”中的“Collider”组件。
WA-155-G 1/12/2009 APPLICATION: Forklifts: Clark C30, C40, C50QTY ITEM # DESCRIPTION LETTERED ITEMSINCLUDED IN KIT1 994193 In-Frame Kit: 3 Ring Pistons & 2.250" Rod Journal I1 994194 In-Frame Kit: 4 Ring Pistons & 2.250" Rod Journal I1 995193 Out-of-Frame Kit: 3 Ring Pistons & 2.250" Rod Journal O1 995194 Out-of-Frame Kit: 4 Ring Pistons & 2.250" Rod Journal O4 191479 Sleeve & Piston Assembly, 3 Ring Piston O I4 191195 Sleeve & Piston Assembly, 4 Ring Piston O I4 191481 Piston Assembly, 3 Ring4 191179 Piston Assembly, 4 Ring4 191181 Cylinder Liner (Includes O-Rings)4 191138 Cylinder Liner O-Ring Package1 191182 Block Repair Sleeve, Lower Liner Pilot Bore4 191478 Piston Ring Set, 3 Ring Piston (2-3/32 1-3/16)4 191196 Piston Ring Set, 4 Ring Piston (3-3/32 1-3/16)4 291163 STD Rod Bearing: Engines w/2.250" Rod Journal O O I I4 291164 .002 Rod Bearing: Engines w/2.250" Rod Journal4 291165 .003 Rod Bearing: Engines w/2.250" Rod Journal4 291166 .010 Rod Bearing: Engines w/2.250" Rod Journal4 291167 .020 Rod Bearing: Engines w/2.250" Rod Journal4 291168 .030 Rod Bearing: Engines w/2.250" Rod Journal4 291169 .040 Rod Bearing: Engines w/2.250" Rod Journal4 291491 STD Rod Bearing: Engines w/1.750" Rod Journal (1)4 291181 STD Rod Bearing: Engines w/2.000" Rod Journal (2)1 291496 STD Main Bearing Set O O I I1 291497 .010 Main Bearing Set (STD Thrust Length)1 291498 .020 Main Bearing Set (STD Thrust Length)1 291488 .020 Main Bearing Set (.020 Oversize Thrust Length)1 291499 .030 Main Bearing Set (STD Thrust Length)1 291489 .030 Main Bearing Set (.020 Oversize Thrust Length)1 291478 .040 Main Bearing Set (STD Thrust Length)1 291479 .040 Main Bearing Set (.020 Oversize Thrust Length)1 391434 Head Gasket Set I I1 391228 Head Gasket8 391395 Positive Valve Seal (Graphite-Teflon Seal w/Metal Jacket) (3)6 391173 Manifold Gasket1 391226 Valve Cover Gasket, Cast Cover (Rubber)1 391227 Valve Cover Gasket, Pressed Steel Cover (Cork)1 391435 Full Gasket Set w/Seals O O1 391437 Timing Cover Gasket1 391229 Front Pulley Gasket1 391448 Pan Gasket I I1 391441 Front Crank Seal1 391442 Rear Crank Seal (Double Lip)4 291147 Pin Bushing (1 Piece Bushing Upgrade)1 291148 Cam Bearing8 791129 Rod Bolt8 791131 Rod Nut(1).010 - 291492 / .020 - 291493 / .030 - 291494 / .040 - 291495 (2).010 - 291182 / .020 - 291183 (3)Use VST1812 Seal ToolWA-155-G 1/12/2009 QTY ITEM # DESCRIPTIONLETTERED ITEMSINCLUDED IN KIT1 999146 Valve Train KitV1 591231 Camshaft 1 591124 Cam Key (3/16 X 1)1 591126 Cam Thrust Spring1 591127 Cam Thrust Button8 591123 Tappet4 4 491186 491216 Exhaust Valve (1.395" Hd / 4.985" OAL) Intake Valve (1.453" Hd / 4.922" OAL) V V4 491182 Exhaust Valve Guide (2.313" OAL) V 4 491188 Intake Valve Guide (2.500" OAL) V4 491147 Exhaust Valve Spring (Use Only w/Rotator) V4 491172 Intake Valve Spring V4 491148 Exhaust Valve Rotator V16 491149 Valve Keeper (2 Lands) V8 491158 Valve Spring Cup4 491189 Exhaust Valve Seat (1.250 x 1.500 x .250 x 45º) 4 401116 Intake Valve Seat (1.312 x 1.562 x .219 x 45º)4 491153 LH Rocker Arm4 491154 RH Rocker Arm1 491349 Rocker Arm Shaft8 491169 Rocker Arm Adjusting Screw2 491139 Rocker Arm Shaft Spring1 591232 Cam Timing Gear 1 591234 Idler Gear Assembly (Includes 2-591235 Bushings)1 591236 Crank Timing Gear8 591143 Push Rod (10.891" OAL)1 691181 Oil Pump Assembly (Includes 691183 Cover/Tube) 1 691129 Oil Pump Kit (2-Blades 1-Spring 1-Shaft 1-Gear 1-Hdw Pkg) 1 691131 Oil Pump Repair Kit (2-Blades 1-Spring)1 691132 Oil Pump Drive Gear1 791132 Plug, Block/Cam (2" Flat Brass)1 791124 Plug, Oil Galley (21/32" Cup) 4 791133 Plug, Cylinder Head (1" Flat Brass)2 791171 Plug, Cylinder Head (1.250" Flat Brass)1 791172 Balancer Bushing Kit (4-Bushings)1 891214 Governor Assembly1 891211 New Water Pump1 891213 Thermostat。
有游戏制作经验的朋友都知道物理引擎的重要性。
游戏虽然是虚拟的,但如果您想让您的游戏看起来比较真实,必须引入真实世界的一些因素,html5游戏也不例外。
Cocos2d-html5提供了良好的物理引擎支持,这样就大大简化、减少了程序工程师们的工作,增加了效率。
要想了解引擎,是首先咱们来熟悉一下一些概念性。
1,什么是刚体?指的就是物理学中所谓的质点,有位置,没有大小,它又可以区分为以下几类静态刚体:静态刚体没有质量,没有速度,只可以手动来改变他的位置棱柱刚体:棱柱刚体没有质量,但是可以有速度,可以自己更新位置动态刚体:动态刚体有质量也有速度小贴士:在咱们的物理引擎中第一个要定义的是描述世界的类,然后才去建立某个对象。
我们创建刚体需要经历两个阶段:1)定义生成刚体;2)依据定义生成刚体。
如果被定义的刚体没有被释放,还可以重复使用。
2,形状?就是通过一定的关联性,将其添加到被定义的对象上,这样我们就可以通过形状来测定在html5游戏中的精灵、场景等是否会发生摩擦以及其它的特性。
3,什么是关联?说明是关联呢?我们可以简单的理解成与对象相关的一切对象,包括对象自己的属性等,例如我们创建对象,之后创建对象的关联,并且需要定义关联的信息,只要不释放,关联也是可以重用的。
4,连接?连接一般可以将多个刚体之间建立关系,使他们之间建立各种关系,在新型的html5编程语言中,也非常重要的,另外值得注意的是,连接还为马达、限制等多方角度进行的支持。
限制可以暂时理解成限制物体的速度、角度、高度、加速度等。
马达是依照一定的关节中去约束物体只有连接旋转,愣住和距离等。
5,约束性?约束就比较容易理解了,一个约束代表消除被创建对象的物理自由度。
在2D中,所有的物体都是有3个自由度:。
关于自由度的一般性解释:x y rotation。
最好的例子是表中的秒针,秒针的x y自由度被取消(固定值),它的rotation自由度还是有的。
另一个例子就是把一个物体钉在墙上,这样我们就把它约束到墙上了,,类似于摆钟。
制作简单物理引擎教案初中教学目标:1. 了解物理引擎的基本概念和作用;2. 学习使用编程语言(如Python)制作简单的物理引擎;3. 培养学生对物理和编程的兴趣和创造力。
教学准备:1. 计算机和投影仪;2. Python编程环境(如Python3.x);3. 教学PPT或黑板。
教学步骤:一、导入(5分钟)1. 向学生介绍物理引擎的概念和作用,例如在游戏中模拟物体的运动和碰撞等;2. 引导学生思考为什么需要物理引擎,例如在现实生活中为什么物体会下落、碰撞时有反弹等。
二、讲解物理引擎的基本原理(15分钟)1. 讲解牛顿运动定律,特别是第一定律(惯性)、第二定律(力与加速度的关系)和第三定律(作用与反作用力);2. 解释碰撞的原理,例如弹性碰撞和完全非弹性碰撞;3. 引导学生理解引擎中的坐标系和变换(如平移和旋转)。
三、演示简单的物理引擎(10分钟)1. 向学生展示一个简单的物理引擎,例如用Python实现的二维物理引擎;2. 解释引擎中的关键部分,如物体类、碰撞检测和物理计算等;3. 演示如何使用引擎模拟物体的运动和碰撞。
四、学生动手制作简单的物理引擎(20分钟)1. 引导学生分组,每组使用Python编程语言制作一个简单的物理引擎;2. 提供一些基本的模板和代码示例,帮助学生理解和开始编程;3. 鼓励学生发挥创造力,添加自己的功能和特性,例如增加多个物体、实现不同的碰撞效果等。
五、展示和讨论(10分钟)1. 让学生展示自己制作的物理引擎,并介绍其功能和实现方法;2. 鼓励学生之间互相提问和讨论,解答彼此的疑惑;3. 教师进行点评和指导,指出学生的优点和需要改进的地方。
六、总结和拓展(5分钟)1. 总结学生制作的物理引擎的主要特点和实现方法;2. 提醒学生物理引擎在现实生活中的应用,如游戏开发、机器人控制等;3. 鼓励学生在课后继续学习和探索,例如学习更高级的物理引擎或尝试使用其他编程语言实现。
教学反思:本教案通过讲解物理引擎的基本原理和演示简单的物理引擎,激发学生对物理和编程的兴趣和创造力。
物理引擎原理引言物理引擎是一种模拟现实物理规律的软件工具,被广泛应用于游戏开发、动画制作和虚拟现实等领域。
它通过模拟物体之间的力学关系,使得虚拟世界中的物体具备真实的运动行为。
本文将介绍物理引擎的基本原理以及其在游戏开发中的应用。
物理引擎的基本原理物理引擎的基本原理是基于牛顿力学和其他物理规律的模拟。
它通过离散时间步长的计算,将物体的位置、速度和加速度等属性进行更新,从而模拟物体的运动。
物理引擎的核心是对物体之间的相互作用进行建模。
它通过使用力学定律,如牛顿第二定律和万有引力定律,计算物体之间的相互作用力。
这些力可以分为两类:内力和外力。
内力是指物体内部的力,如弹力和摩擦力;外力是指物体外部施加的力,如重力和碰撞力。
物体之间的相互作用力可以通过公式 F = ma 来计算,其中 F 是力,m 是物体的质量,a 是物体的加速度。
根据牛顿第二定律,加速度与力成正比,与质量成反比。
因此,物体受到的力越大,加速度就越大;物体的质量越大,加速度就越小。
物理引擎还考虑了物体之间的碰撞。
当两个物体发生碰撞时,它们之间会产生碰撞力,导致物体的速度和方向发生变化。
物理引擎使用碰撞检测算法来检测物体是否发生碰撞,然后根据碰撞的类型和物体的属性来计算碰撞力的大小和方向。
物理引擎的应用物理引擎在游戏开发中有着广泛的应用。
它可以模拟真实世界中的物理行为,使得游戏中的物体具备真实的运动和碰撞效果。
例如,在赛车游戏中,物理引擎可以模拟车辆的加速度、转向和碰撞,使得玩家可以真实地感受到驾驶的乐趣。
物理引擎还可以用于模拟物体的布料、液体和气体等特性。
例如,在动画制作中,物理引擎可以模拟布料的运动,使得服装在角色行走时呈现出自然的摆动效果。
在虚拟现实中,物理引擎可以模拟液体和气体的流动,使得用户可以与虚拟环境进行更加真实的互动。
除了游戏开发和动画制作,物理引擎还在工程领域有着广泛的应用。
它可以用于模拟建筑物结构的稳定性,优化设计方案;可以用于模拟机械系统的运动,提高工作效率;还可以用于模拟流体的流动,优化管道系统的设计。
游戏开发中的游戏物理引擎使用方法游戏物理引擎是现代游戏开发中不可或缺的一部分。
它们用于模拟游戏中的物体运动、碰撞和互动等物理效果,使游戏更加逼真和令人愉悦。
本文将介绍游戏开发中的游戏物理引擎的使用方法,帮助开发者更好地利用它们创建出高品质的游戏体验。
首先,选择适合您项目的游戏物理引擎。
目前市场上有许多种游戏物理引擎可供选择,例如Unity3D中的物理引擎Unity Physics和开源物理引擎Box2D等。
在选择物理引擎时,需要考虑项目的需求、目标平台和开发者的经验等因素。
选择一个适合的物理引擎可以减少开发时间和困难。
安装和配置物理引擎。
一旦选择了合适的物理引擎,就需要将其安装到开发环境中,并进行相应的配置。
这包括将物理引擎库文件导入到项目中,并在项目设置中启用物理引擎模块。
具体的安装和配置过程可以参考物理引擎的官方文档或社区中的教程。
创建物理世界和物体。
在游戏中使用物理引擎之前,需要首先创建一个物理世界。
物理世界是一个模拟真实世界物理规律的场景,其中包含物体、力、碰撞等元素。
通过物理引擎提供的接口,可以在游戏中创建物体并设置它们的初始位置、形状、质量等属性。
给物体施加力和控制运动。
物理引擎可以模拟物体之间的力和运动。
开发者可以通过向物体施加力的方式来控制它们的运动。
例如,可以使用物理引擎提供的接口在游戏中实现跳跃、推动、拉动等动作。
此外,物理引擎还可以模拟摩擦力和空气阻力等效果,使物体的运动更加自然和真实。
处理碰撞和触发事件。
物理引擎能够检测和处理物体之间的碰撞。
当两个物体碰撞时,物理引擎会触发相应的事件,并提供碰撞点、速度和力等信息。
开发者可以通过监听这些事件来实现游戏中的碰撞效果,例如物体的弹跳、爆炸等。
此外,物理引擎还可以设置碰撞的过滤和类型,以实现特定的碰撞行为。
优化和调试物理效果。
在开发过程中,可能会遇到物理效果不理想或性能问题等情况。
为了优化物理效果,可以调整物理引擎的参数,如重力、速度阈值等。
物理引擎Havok教程(一)搭建开发环境网上关于Havok的教程实在不多,而且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望能够帮到读者。
这是第一期。
一、Havok物理引擎简介Havok引擎,全称为Havok游戏动力开发工具包(Havok Game Dynamics SDK),一般称为Havok,是一个用于物理系统方面的游戏引擎,为电子游戏所设计,注重在游戏中对于真实世界的模拟。
使用碰撞功能的Havok引擎可以让更多真实世界的情况以最大的拟真度反映在游戏中。
开发商Havok成立于1998年,目前Havok物理引擎被超过200款游戏使用,许多电影也应用了这家公司的软件技术。
2007年9月Havok被Intel收购,为了和NVIDIA的PhysX竞争,Intel在去年的(08年)免费开放了Havok的Physics和Animation组件,内容包括Havok SDK库、样例、技术文档以及支持Maya、3ds Max和Avid XSI等3D建模软件的格式转换工具。
按照Havok的授权文档,即使使用它开发商业游戏也是不需要付费的,这对国内的爱好者应该是一个好消息。
同PhysX相比,个人觉得,Havok无论在稳定性还是功能上,都要略胜一筹。
NVIDIA 的PhysX在硬件加速上,暂时领先,但随着AMD加入到Havok硬件加速的开发,未来Havok 的功能肯定会更加的强大。
二、Havok开发环境的搭建1.安装SDK首先,到Havok的官网下载SDK,/sites/havok/,填写自己的姓名和邮箱,注册后即可下载。
Content Tools是内容工具,包括一些3D建模软件的导出工具。
Behavior Tool是给游戏美工或设计师用的角色编辑工具,具有所见即所得的功能。
对程序员来讲最重要的就是SDK了,我下载的是6.0.0这个版本。
因为Intel只开放了物理和动画两个组件,所以下载的SDK是只包含这两个组件,其他的如布料(Cloth)和破坏(Destruction)还是需要付费才能使用。
Havok SDK使用的是C++语言,开发环境是Visual Studio,我用的版本是2005。
Demo目录下面是SDK的样例程序和源代码,Docs是文档,包括chm和pdf两种格式。
Lib是链接库,库分为Debug和release及动态链接和静态链接。
Source下面是SDK 的包含文件。
Tools下面是工具,包括了Visual Debugger这个可视化调试器。
2.设置Visual Studio这里以我使用的Visual Studio 2005为例。
头文件包含目录的设置。
打开Visual Studio 2005,依次选择工具-》选项-》项目与解决方案-》VC++目录选择包含文件,添加新的一行,路径指向Havok SDK安装目录的Source目录。
建议建立一个叫HAVOK_HOME的环境变量,这样可以避免使用绝对路径。
库目录不能在这里设置,而应该为debug和release版本设置不同的库包含目录。
因为不论是debug还是release,它们的库名都是相同的。
你可以打开Demo/Demos下面的工程,看看它是如何设置为不同版本设置链接包含目录的。
三、第一个Havok程序这里以SDK自带的一个控制台演示程序为例,使用Visual Debugger来观察Havok 的具体效果。
首先运行Tools\VisualDebugger目录下的Visual Debugger程序,使用它我们可以观察到Havok实际运行的效果,而省去渲染步骤,而且可以把场景记录下来,供以后观看。
演示程序在Demo\StandAloneDemos\ConsoleExampleMt目录下,这个程序模拟一个快速运动的刚体,撞击墙壁的效果。
运行它,然后就可以在VisualDebugger中看到实际的效果了。
好了,第一期教程就是这样。
下期会接触到具体的编码问题。
如果你有任何问题,欢迎和我交流,我的邮箱songnianhu@,博客/shangguanwaner,下期再见。
物理引擎Havok教程(二)Havok基础库简介Havok的SDK可以说比较复杂,并不是适合用来学习。
拿它用来演示效果的Demo 程序的框架来说,它的实现实在是非常的神秘,初学者一开始就接触海量的代码,估计会很大的挫伤积极性。
所以为了降低大家学习的难度,我在做教程的时候会主要使用实际的代码来介绍SDK的各种特性,代码编写时我会尽量的简洁和通俗一点。
示例代码我会整理好,提供链接,供大家下载。
觉得好的话,大家要支持啊!Havok SDK可以分为三大部分,Havok基础库、Havok物理组件、Havok动画组件。
基础库,为Havok的其他组件提供了通用功能的支持,Havok物理组件负责实时的刚体模拟,Havok动画组件负责处理骨骼和角色动画,与物理组件配合,可以实现强大的角色动画控制功能。
关于Havok SDK的代码习惯,这里要说明一下,Havok SDK所有的类名基本上都以hk*开头,然后后面跟一个字符表示它所属的组件,例如,hkpWorld,说明它属于物理组件(Havok Physics),hkaBone,说明它属于动画组件(Havok Animation),hk后不跟一个表示组件的字符,则表明它是Havok基础库的一部份。
Havok基础库Havok基础库定义了一些基本的数据类型和容器类,它还包括与平台无关的接口,用于访问操作系统的资源,比如内存管理、时钟等。
基础库中的许多类都可以修改或者替换,这样通过提供的源代码,你可以灵活地扩展基础库的功能。
不过有些部分,因为编译进了Havok库,所以不能被替换,包括那些有内联函数的容器类,还有config目录下面的构造配置选项(它保存了在编译Havok库时的配置,对它进行任何更改,都需要重新构建整个Havok库)。
使用基础库,只需要简单的包含hkBase.h即可。
hkBase.h内,还定义了一些最基本的数据类型,比如浮点型(hkReal),有符号和无符号整形等等。
1. Havok基本系统1.1 Havok的初始化hkBaseSystem类负责创建所有Havok子系统。
这些子系统中大部分都是单态类(singleton),各自都有特定的功能,比如内存管理、错误处理、流处理。
这些类的主要接口是init和quit方法。
调用init方法来初始化Havok子系统。
static hkResult HK_CALL init( hkMemory* memoryManager,hkThreadMemory* threadMemory,hkErrorReportFunction errorReportFunctionvoid* errorReportObject = HK_NULL );参数memoryManager,是一个将被Havok在内部使用的内存管理器的实现。
这个参数允许你在初始化的过程中指定内存管理器而不必重新构建hkBase。
Havok本身提供了许多默认的内存管理器的实现,如果没有特殊要求的话,就可以使用它们。
当然,你也可以实现自己的一个内存管理器,Havok推荐使用hkPoolMemory类。
这个内存管理器的实现以及其他的可用的实现可以在<hkbase/memory/impl>目录下面找到。
参数threadMemory,是当前线程的内存管理器,它可以用于优化内存分配和释放的性能。
如果你传入了HK_NULL作为参数,默认的,hkBaseSystem::init()会为你创建一个hkThreadMemory实例。
errorReportFunction和errorReportObject参数被Havok的错误处理器使用,错误处理器主要负责处理断言、错误、警告,或者在引擎内部报告这些事件的发生。
默认的错误处理器是<hkBase/hkerror/hkDefaultError.h>,它只是简单的调用errorReportFunction打印错误消息。
下面举一个使用hkPoolMemory初始化hkBaseSystem的代码示例:#include <Common/Base/System/hkBaseSystem.h> // include for hkBaseSystem#include <Common/Base/Memory/Memory/Pool/hkPoolMemory.h> // hkPoolMemory extern "C" int printf(const char* fmt, ...); // For printf, used by the error handler// Stub function to print any error report functionality to stdout// std::puts(...) could be used here alternativelystatic void errorReportFunction(const char* str, void* errorOutputObject){printf("%s", str);}{...hkBaseSystem::init( new hkPoolMemory(), HK_NULL, errorReportFunction ); ...}hkBaseSystem还有一个quit方法,它退出内存系统并销毁所有的hkSingleton实例。
1.2 Havok多线程模式的初始化和PhysX不同,Havok现阶段采用的是CPU计算,所以Havok采用了多线程来提高性能。
Havok使用的每一个线程,都有它自己的hkThreadMemory内存管理器,必须在线程开始时初始化,线程结束时销毁。
hkThreadMemory可以用于在销毁和重分配内存时缓存内存块。
下面的代码演示在主线程中的初始化。
hkMemory* memoryManager = new hkPoolMemory();hkThreadMemory threadMemory(memoryManager, 16);hkBaseSystem::init( memoryManager, &threadMemory, errorReportFunction ); memoryManager->removeReference();1.2 管理Havok对象Havok使用引用计数来管理对象。
hkBaseObject是所有Havok类的基类,只有虚函数。
hkReferencedObject是hkBaseObject的子类,他是Havok对象管理的最基本单元,刚体(Rigid bodies)、约束(constraints)和动作(actions)都是hkReferencedObject。