Havok第一个最简单的Hello World程序

作者:CYM

因为在做地形管理,本来想自己写一个简单的物理引擎,但发现用现有的Havok物理引擎会更好,毕竟是世界一流的物理引擎,还是免费.但唯一的遗憾就是关于Havok的教程太少,少的可怜.只能硬着头皮看官方的英文SDK.这里先介绍一下最简单的Hello World,个人水平有限,难免会出错,所以写的不好不要喷

想要使用Havok物理引擎需要先到Havok官网去下载SDK,在下载之前先要注册,随便注册一下就可以了,下图:

官网地址:http://software.intel.com/sites/havok/


如果是美工的话就下载Havok Content Tools for Game Artists and Designer

程序的话就下载:Havok Physics and Havok Animation SDKs For Programmers

按自己需要选择自己需要的版本



HelloWorld的源码可以在官方的SDK中hk2011_1_0_r1\Demo\StandAloneDemos\StepByStep\MemoryUtilInit文件中找到,用VS2010打开

在编译之前先要配置好环境:如图



最好还要修改一下代码,在Main函数的末尾加上std::getchar(),,,这样可以避免程序一闪而过

程序的一开始会有三行关于内存方面的代码,由于没注释,所以先讲解一下

hkMallocAllocator baseMalloc;

//这段代码用于未解决器分配内存,因为这里只是简单的Helloworld所以分配给他的内存为0MB

hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initDefault( &baseMalloc, hkMemorySystem::FrameInfo(0) );

hkBaseSystem::init( memoryRouter, errorReport );

上面三段代码用到了两个类:hkMallocAllocator 和hkMemoryRouter,简单的介绍下这两个类,如果想要获取更多信息可以看SDK

hkMallocAllocator:是最低级的接口,通过指定的块可以被申请和释放

hkMemoryRouter:是每个线程,hkMallocAllocator的集合,他包涵regular heap, temporary allocations 和 debug allocations的分配器器

hkMemorySystem:最高级别的接口用于整个系统.创建新的线程 memory router(实在不知道这个怎么翻译,叫内存路由器?),通常包涵所有的分配器对于所有的线程


下面是这三个接口的关系图:






--------------------------------------------------以下是源码-----------------------------------------------------------

// 这个简单的控制台程序将演示如何使用 hkMemoryInitUtil去初始化内存, 

// 以及Havok核心系统的启动和关闭.

#include

#include

#include

#include


#if defined(HK_PLATFORM_NGP)

unsigned int sceLibcHeapSize = 64*1024*1024;

#endif

 

//错误打印函数

static void HK_CALL errorReport(const char* msg, void* userContext)

{

using namespace std;

printf("%s", msg);

}

 

int HK_CALL main(int argc, const char** argv)

{

hkMallocAllocator baseMalloc;

hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initDefault( &baseMalloc, hkMemorySystem::FrameInfo(0) );

hkBaseSystem::init( memoryRouter, errorReport );

{

//HK_WARN_ALWAYS(0x417ffd72, "Hello world!");

std::printf("%s","Hello World!~"); 

}

hkBaseSystem::quit();     

hkMemoryInitUtil::quit();

//暂停,按任意键退出

std::getchar();


return 0;

}

 

//以下这几段代码现在也不是很了解,但大概猜一下应该是排除一些用不到的东西,来减小程序的大小和包涵一些配置

#include

// we're not using anything product specific yet. We undef these so we don't get the usual

// product initialization for the products.

#undef HK_FEATURE_PRODUCT_AI

#undef HK_FEATURE_PRODUCT_ANIMATION

#undef HK_FEATURE_PRODUCT_CLOTH

#undef HK_FEATURE_PRODUCT_DESTRUCTION

#undef HK_FEATURE_PRODUCT_BEHAVIOR

#undef HK_FEATURE_PRODUCT_PHYSICS

// Also we're not using any serialization/versioning so we don't need any of these.

#define HK_EXCLUDE_FEATURE_SerializeDeprecatedPre700

#define HK_EXCLUDE_FEATURE_RegisterVersionPatches

#define HK_EXCLUDE_FEATURE_RegisterReflectedClasses

#define HK_EXCLUDE_FEATURE_MemoryTracker

// This include generates an initialization function based on the products

// and the excluded features.

#include

你可能感兴趣的:(物理引擎,游戏引擎,游戏开发,引擎开发,其它文章,Havok)