zoukankan      html  css  js  c++  java
  • Bullet 学习笔记之 btDefaultSoftBodySolver

    btSoftBodySolver 是 Bullet 物理引擎中关于软体形变仿真的又一个关键类。btSoftBodySolver 提供了关于软体形变仿真求解的一些接口。目前,在 Bullet 物理引擎中,派生出的只有 btDefaultSoftBodySolver 类。

    下面来看一下,btDefaultSoftBodySolver 里面都有什么,实现了什么样的功能。


    1、btDefaultSoftBodySolver 类的总体情况

    btDefaultSoftBodySolver 类中,其成员变量也十分简单,仅仅是在 btDefaultSoftBodySolver.m_softBodySet 中存储了所涉及到的软体对象。

    成员函数也很简单,有如下:

    virtual bool checkInitialized();
    
    virtual void updateSoftBodies();
    
    virtual void optimize(btAlignedObjectArray<btSoftBody *> &softBodies, bool forceUpdate = false);
    
    virtual void copyBackToSoftBodies(bool bMove = true);
    
    virtual void solveConstraints(btScalar solverdt);
    
    virtual void predictMotion(btScalar solverdt);
    
    virtual void copySoftBodyToVertexBuffer(const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer);
    
    virtual void processCollision(btSoftBody *, const btCollisionObjectWrapper *);
    
    virtual void processCollision(btSoftBody *, btSoftBody *);
    

    主要涉及软体的状体更新、约束求解、碰撞检测等。


    2、主要成员函数

    包括了 xxx。

    2.1、场景优化函数 btDefaultSoftBodySolver::optimize(..)

    哈,就一句话

    m_softBodySet.copyFromArray(softBodies);
    

    把涉及到的软体,拷贝(指针)到 m_softBodySet 中。

    2.2、位移计算函数 btDefaultSoftBodySolver::predictMotion(t)

    也是一句话,遍历 m_softBodySet 中的所有软体对象,执行 psb->predictMotion(timeStep);

    2.3、更新软体位置 btDefaultSoftBodySolver::updateSoftBodies

    同样是交由 btSoftBody 类来完成。即,遍历 m_softBodySet 中的所有软体对象,执行 psb->integrateMotion();

    2.4、约束求解 btDefaultSoftBodySolver::solveConstraints

    交由 btSoftBody 类来完成。即,遍历 m_softBodySet 中的所有软体对象,执行 psb->solveConstraints();

    2.5、碰撞处理 btDefaultSoftBodySolver::processCollision

    这部分工作是交由 softBody->defaultCollisionHandler(otherSoftBody); 以及 softBody->defaultCollisionHandler(collisionObjectWrap); 来完成的。


    3、总结

    总体上来说,btSoftBodySolver 也没做啥事。

  • 相关阅读:
    Java中Volatile关键字详解
    java hashmap&concurrentHashmap源理
    java CAS和AQS
    jvm内存模型
    springAop源码分析
    一个项目设置两个git地址,并最终实现一次性同时推送到到两个git地址上的方法总结
    H5实现横向滚动的方法总结
    tab吸顶的神奇-- css粘性属性
    H5制作显示轮播图的方法Swiper
    微信H5中禁止分享好友及分享到朋友圈的方法
  • 原文地址:https://www.cnblogs.com/wghou09/p/12827798.html
Copyright © 2011-2022 走看看