Havok动画渲染Demo(使用Ogre)

本文介绍如何将Havok的动画组件与Ogre渲染引擎整合,通过导入Havok角色动画并实现实时渲染。作者在过程中遇到Havok SDK示例代码不全的问题,通过分析关键点输出,最终成功实现二者的结合。示例代码展示了如何从hkxMeshSection数据结构中提取信息,在Ogre中创建和更新Mesh。
摘要由CSDN通过智能技术生成

Havok的Animation组件是比较强大的,并且可以和物理场景进行交互,其实可以完全不用Ogre的骨骼动画系统,动画的处理完全交给Havok,Ogre只管显示即可。

花了点时间,做了个测试程序,将二者结合到一起,导入Havok的一个角色动画,然后播放这个动画,Ogre实时渲染出来。截图如下:



这里吐槽下,Havok SDK自带的Demo,特别是一些和图形渲染相关的代码,很多都不提供源代码和参考例子。写代码中间几次卡住,抓狂到极点。无耐只能自己跟踪程序,看他的一些关键点的输出,进行分析。

例子是Havok自带的例子改过来的,见Havok SDK目录Demo\Demos\Animation\Api\MeshAndDeformation\Skinning。我就说下和Ogre的整合方法。最主要的是hkxMeshSection这个数据结构,它包含了Mesh的顶点、Normal、UV坐标等等数据,把他导出,在Ogre中手动建立Mesh,再实时的在Ogre中更新这个Mesh即可。给出主要的功能代码:

int SkinningMesh::AllocateMesh(hkxMeshSection* meshsec)
{
    const hkxVertexDescription& vdesc = meshsec->m_vertexBuffer->getVertexDesc();
    const hkxVertexDescription::ElementDecl* pdecl = vdesc.getElementDecl(hkxVertexDescription::HKX_DU_POSITION, 0);
    const hkxVertexDescription::ElementDecl* ndecl = vdesc.getElementDecl(hkxVertexDescription::HKX_DU_NORMAL, 0);
    const hkxVertexDescription::ElementDecl* tdecl = vdesc.getElementDecl(hkxVertexDescription::HKX_DU_TEXCOORD, 0);

    hkxVertexBuffer* vbuf = meshsec->m_vertexBuffer;

    Ogre::String strName = "SkinningMesh" + Ogre::StringConverter::toString(m_nMeshNum++);
    int nVertexCount = vbuf->getNumVertices();

    //DBGSTRING("nVertexCount: %d", nVertexCount);

    VERTEXSET_DATA* pVertexSetData = new VERTEXSET_DATA();
    pVertexSetData->vertexSet.SetVertexNum(nVertexCount);

    pVertexSetData->mesh = Ogre::MeshManager::getSingleton().createManual(
        strName, Ogre::ResourceGrou

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值