mesh rigidbody drawing

2024-03-23 16:38
文章标签 mesh drawing rigidbody

本文主要是介绍mesh rigidbody drawing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法一:获取顶点和索引的方法来画出碰撞膜

hkpRigidBody* createMesh(const hkVector4& position, hkReal scale)
{
    hkpStorageExtendedMeshShape* extendedMesh = new hkpStorageExtendedMeshShape();
    for(int numobj=0; numobj<m.Objects[numobj].numObjects; numobj++)
    {
        hkpSimpleMeshShape* meshShape = new hkpSimpleMeshShape( 0.05f );
        {
            int side=m.Objects[numobj].numVerts;
            meshShape->m_vertices.setSize( side );
            for (int j = 0; j < side; j++ )
            {  
                hkVector4 vertex (m.Objects[numobj].Vertexes[j*3+0], 
                m.Objects[numobj].Vertexes[j*3+1], 
                m.Objects[numobj].Vertexes[j*3+2] ); 
                //vertex.add4(position);  
                vertex.mul4(scale);
                meshShape->m_vertices[j] = vertex ;
            } 

            side=m.Objects[numobj].numFaces/3;
            meshShape->m_triangles.setSize( side); 
            for (int j = 0; j < side; j++ ) 
            { 
                meshShape->m_triangles[j].m_a = m.Objects[numobj].Faces[3*j+0];
                meshShape->m_triangles[j].m_b = m.Objects[numobj].Faces[3*j+1]; 
                meshShape->m_triangles[j].m_c =  m.Objects[numobj].Faces[3*j+2];
            }  
        }  

        hkpExtendedMeshShape::TrianglesSubpart part;  
        part.m_numTriangleShapes = meshShape->m_triangles.getSize();
        part.m_numVertices = meshShape->m_vertices.getSize(); 
        part.m_vertexBase = (float*)meshShape->m_vertices.begin();
        part.m_stridingType = hkpExtendedMeshShape::INDICES_INT16;  
        part.m_vertexStriding = sizeof(hkVector4);
        part.m_indexBase = meshShape->m_triangles.begin();
        part.m_indexStriding = sizeof(hkpSimpleMeshShape::Triangle);
        extendedMesh->addTrianglesSubpart( part ); 
    }
    hkpMoppCompilerInput mci; 
    mci.m_enableChunkSubdivision = false; 

    hkpMoppCode* code = hkpMoppUtility::buildCode( extendedMesh ,mci);
    hkpMoppBvTreeShape* moppShape = new hkpMoppBvTreeShape(extendedMesh, code); 
    code->removeReference();  
    extendedMesh->removeReference();  

    hkpRigidBodyCinfo info;  
    info.m_friction = 10;    
    info.m_shape = extendedMesh; 
    info.m_motionType = hkpMotion::MOTION_FIXED; 
    info.m_position = position; 
    info.m_rotation = hkQuaternion(hkVector4(0,1,0),0);
    hkpRigidBody *r=new hkpRigidBody(info); 
    m_world->addEntity(r);  
    return r;  
}

 

int DrawRigidBody(hkpRigidBody *rbody,hkVector4 &color)
{
    if(!rbody)return 0;
    const hkpShape *shape=rbody->getCollidable()->getShape();
    hkTransform t=rbody->getTransform();

    hkpShapeDisplayBuilder::hkpShapeDisplayBuilderEnvironment env; 
    hkpShapeDisplayBuilder GeometryBuilder(env);  
    hkArray<hkDisplayGeometry*>* displayGeometries;  

    displayGeometries = new hkArray<hkDisplayGeometry*>; 
    GeometryBuilder.buildDisplayGeometries(shape, *displayGeometries );

    for (int j=0; j<displayGeometries->getSize(); j++) 
    {     
        hkDisplayGeometry* geometry = (*displayGeometries)[j];  
        geometry->buildGeometry(); 

        hkGeometry* mesh = geometry->getGeometry();  
        if(!mesh)exit(0);  
        //OpenGlRendering(mesh,t);        //rendering using opengl.... 
        geometry->removeReference();  
    } 
    delete displayGeometries;     

    return 1;
}

 

void InitHavok()  
{  
    //other code...  
    car=CreateMesh(hkVector(0,0,0),0.05);  
}

 

void Render()  
{  
    //othercode...  
    DrawRigidBody(car,hkVector4(0,0,1));  
}

 

方法二:直接获取aabb盒画线

hkpRigidBody *rb = xxx;

hkAabb aabbOut;

const hkpShape *pShape = rb->getCollidable()->getShape();

pShape->getAabb(rb->getTransform(), 0.0f, aabbOut);

//根据shape类型可以设置不同的颜色

hkpShapeType type = pShape->getType();

// 。。。。。。

//接下来就是根据hkAabb画线   aabbOut.m_min和aabbOut.m_max

这篇关于mesh rigidbody drawing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838920

相关文章

OnTrrigerEnter与OnCollisionEnter、OnControllerColliderHit、Rigidbody、CharacterController

1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B  两者都有碰撞体collider(Box Collider,Sphere Collider,Capsule Collider等) A,B都有刚体(Rigidbody) A或者B中有一个勾选isTrigger或者两者都勾选isTrigger A和B都可以进入OnTriggerEn

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

Data Mesh,数据网格的道与术

周末的时候,看到有群友讨论关于 Data Mesh 的话题。这个名词我在2020年初的时候听到过一次,当时感觉就是一个概念,看的糊里糊涂,没有当回事。最近突然又被推上了话题风口,所以静下心来看了一下相关的论文和介绍。 在讨论 Data Mesh 之前,首先要给大家介绍一下 Service Mesh。 Service Mesh 公认的定义,是用以处理服务与服务之间通信的专用基础设施层。更本质的理

Open3D mesh 模型精细化处理--中点剖分

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 输入参数 输出参数 三、实现效果 3.1原始mesh 3.2精细化mesh Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         在三维模型处理过程中,精细化处理(subdivision)是一个

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器(附项目源码)

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】Cinemachine虚拟相机+Character Controller实现俯视角、第三人称角色控制,复制粘贴即用

Open3D mesh 拉普拉斯laplacian滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数  参数详解 返回值 2.2完整代码 三、实现效果 3.1加入噪点的mesh 3.2迭代10次 3.3迭代100次 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         拉普

Open3D mesh Taubin滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 参数详解 返回值 2.2完整代码 三、实现效果 3.1加入噪声的mesh 3.2Taubin迭代10次 3.3Taubin迭代100次 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述

MeshAnything V2来了!30秒生成建模师级Mesh!最大可生成面数提升至1600.

GitHub已揽星1.9k的MeshAnything项目上新了V2版本,由来自南洋理工大学、清华大学、帝国理工学院、西湖大学等研究人员完成。 MeshAnything V2相比V1,使用了最新提出的Adjacent Mesh Tokenization(AMT)算法,将最大可生成面数从800提升到了1600。 只需30秒,AI就能像3D建模师一样,在各种指示下生成高质量人造Mesh。 NeRF

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】Cinemachine虚拟相机+Character Controller实现俯视角、第三人称角色控制,复制粘贴即用