介绍由于当前移动设备上具有更高的计算性能,移动游戏现在也可以提供令人惊叹的图形和逼真的物理效果。枪战游戏中的手榴弹爆炸效果和赛车模拟器中的汽车漂移效果均由物理引擎提供,其核心是物理模拟。一般来说,物理模拟决定了游戏引擎的性能。游戏的成功往往取决于物理引擎计算物理模型的速度和准确性。本文介绍如何构建适用于Android的Bullet物理引擎并将其转移到基于英特尔?凌动SoC的平台。BulletPhysicsBulletPhysics库是一种实时物理引擎,通常用作许多计算机游戏、电影、3D建模系统和其他应用程序中其他游戏引擎的组件[http://bulletphysics.org/]。2011年年中,发布了支持Android操作系统(ARMNEON*优化)的版本。首先,我们在配备基于ARM的处理器的三星Galaxy*Tab310.1上以每秒30帧的速度运行Bullet物理应用程序。然后,我们将Bullet物理应用程序移植到x86架构,并在SamsungGalaxy*Tab310.1(现在配备英特尔?x86处理器,每秒60帧)上运行Bullet物理应用程序。我们使用英特尔?图形性能分析器[http://software.intel.com/en-us/vcsource/tools/intel-gpa]比较了每种情况下的性能。通过将他们的应用程序移植到x86架构,开发人员可以获得额外的帧时间来加速他们游戏中的物理计算,因此他们有更多时间在他们的游戏中处理更逼真的物理或运动。准备构建并移植我们需要的Bullets:AndroidSDK[https://developer.android.com/sdk/index.html]AndroidNDK[https://developer.android.com/tools/sdk/ndk/index.html]Eclipse*ADT[https://developer.android.com/sdk/installing/bundle.html]BulletPhysics[https://bullet.googlecode.com/files/bullet-2.80-rev2531.zip]整个过程可以在Windows*、Linux*或MacOS*上运行;三种制度在这方面没有本质区别。我们在联想K900和三星Galaxy*Tab10.13上运行了测试。这两款设备均基??于英特尔凌动处理器Z2460。此处附有一个脚本,可自动执行本文中描述的所有内容。构建的第一步是在ARM下构建并运行示例应用程序PfxApp_1_Simple。然后,我们将构建PfxLibrary库—物理引擎的主要组件。为此,请访问库项目目录:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxLibrary\jni是bullet-2.80-rev2531文件夹的路径。打开目录中的Android.mk文件,然后找到并替换声明的变量,如下所示:LOCAL_PATH:=\bullet-2.80-rev2531\Extras\PhysicsEffects然后,打开控制台并导航到:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxLibrary运行命令:ndk-build成功!我们成功地为armeabi-v7a构建了PfxLibrary。接下来,让我们构建示例应用程序。导航到以下目录:\bullet-2.80-ev2531\Extras\PhysicsEffects\project\Android\PfxApp_1_Simple\jni打开Android.mk文件并更改声明:LOCAL_PATH:=\bullet-2.80-rev2531\Extras\PhysicsEffects在命令提示符下,更改项目文件夹中的目录:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxApp_1_Simple运行命令:ndk-build我们使用EclipseIDE启动应用。将项目导入Eclipse:File=>Import=>Android=>ExistingAndroidCodeIntoWorkspace=>Browse...=>\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxApp_1_Simple\=>OK=>完成以运行相同的应用程序。右键单击项目图标并选择“RunAs=>AndroidApplication”,图2中所示的示例将以过渡模式运行。移植接下来,我们将把示例PfxApp_1_Simple移植到x86。从核心PfxLibrary库开始。导航到项目文件夹:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxLibrary\jni打开Android.mk文件并更改此声明:APP_ABI:=x86对Android进行以下更改。mk文件:LOCAL_PATH:=\bullet-2.80-rev2531\Extras\PhysicsEffectsLOCAL_CFLAGS:=$(LOCAL_C_INCLUDES:%=-I%)-DUSE_PTHREADS–pthreadLOCAL_ARM_NEON:=false通过从LOCAL_SRC_FILES声明列表中删除以下内容来删除ARM*优化的汇编文件:src/base_level/solver/pfx_constraint_row_solver_neon.cpp\include/vecmath/neon/vectormath_neon_assembly_implementations.S重建物理引擎。在命令提示符下,将工作目录更改为:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxLibrary并运行ndk-build。我们现在已经为x86架构创建了PfxLibrary。重复以上操作移植示例应用。导航到以下项目目录:\bullet-2.80-ev2531\Extras\PhysicsEffects\project\Android\PfxApp_1_Simple\jni打开Application.mk文件并替换语句:APP_ABI:=x86替换Android中的变量。mk文件:LOCAL_PATH:=\bullet-2.80-rev2531\Extras\PhysicsEffectsLOCAL_SRC_FILES:=project/Android/PfxLibrary/obj/local/x86/libpfxlibrary.aLOCAL_CFLAGS:=$(LOCAL_C_INCLUDES:%=-I%)LOCAL_ARM_NEON:=falsethefollowingfromLOCAL_S内容:sample/test_ARM_NEON_performance/neon_dot_product.S\sample/test_ARM_NEON_performance/neon_cross_product.S\sample/test_ARM_NEON_performance/neon_matrix4_operator_multiply.S\sample/test_ARM_NEON_performance/neon_matrix3_operator_multiply.S\sample/test_ARM_NEON_performance/neon_orthoInverse_transform3.S\sample/test_ARM_NEON_performance/neon_transform3_operator_multiply.S\sample/test_ARM_NEON_performance/neon_transpose_matrix3.S\sample/test_ARM_NEON_performance/test_neon_cross_product.cpp\sample/test_ARM_NEON_performance/test_neon_dot_product.cpp\样本/测试_ARM_NEON_performance/test_neon_matrix3_operator_multiply.cpp\sample/test_ARM_NEON_performance/test_neon_matrix4_operator_multiply.cpp\sample/test_ARM_NEON_performance/test_neon_orthoInverse_transform3.cpp\sample/test_ARM_NEON_performance/test_neon_transform3_operator_multiply.cpp\sample/test_ARM_NEON_performance/test_neon_transpose_matrix3.cpp\sample/test_ARM_NEON_performance/test_neon_solve_linear_constraint_row.cpp为项目文件夹更改工作目录:\bullet-2.80-rev2531\Extras\PhysicsEffects\project\Android\PfxApp_1_Simple使用ndk-build命令构建工程,然后在设备上运行示例使用GooglePlay提供的APKInfo应用来查看支持的架构[https://play.google.com/store/apps/details?id=com.intelloware.apkinfo]。结论本文逐步介绍了构建和移植物理引擎—BulletPhysics。应用成功移植到x86架构后,应用物理移植速度提升2倍,帧率(FPS)提升。