• Box2D备忘录


        最近除了看一些技术书籍以及写毕业论文之外,主要研究的是Box2D物理引擎,细细数来,差不多有一个月了,所以在这里做一个备忘录。

        与PhysX类似,物理模型的主要类型也是分为dynamic、kinematic、static三个部分,只要稍微改一下属性值,三个之间便可以改变,不过我建议不要改变物体的物理类型。至于其他信息,大家可以参考它的英文手册,整体还是非常好理解的,我用了两天时间就在实习公司的UI上写出了第一个程序。下面我主要讲的是一些编程时应该注意的问题:

       1、很多引擎在计算旋转矩阵时使用的都是弧度,而不是角度,box2D也不例外;

       2、box2D的单位是米,如groundBox.SetAsBox(50.0f, 10.0f)语句表示建立宽为100米,高为2米的物体,之所以这样设置是因为在计算物理方程时使用的单位为米-千克-秒。box2D规定物理模型的大小最好在0.1-10之间,静态物体可以在50左右。超过这个范围会怎样呢,牛仔做过很多实验,发现你所创建的所有物体的速度都会比你预设的慢,而且setLinearVelocity等函数会部分失效。为什么说部分失效,是因为它会有一个峰值,而且这个峰值不会很大。这样物体虽然能够运动,但即使你把速度的length设置为1W以上,跑出来的速度可能也只是20,这点大家务必注意了。

       3、如果牛仔没测试错的话,Box2D的坐标系采用的绘制旋转都是基于逆时针的坐标系。在用UI绘制时需要注意坐标系镜像,因为很多UI的坐标系的原点在左上角且Y轴朝下,如Qt。如果用渲染API应该不会存在这个问题,比如OpenGL等,可以用viewport来调整视窗的大小,非常方便。

       嗯,感觉2D引擎跟3D引擎比,专业术语其实差不多,设计理念也差不多,不过3D会涉及到一些更负责的元素,如牛仔研究过的布料、ragdoll等等。Ok,希望能跟你一起探讨,共同进步,我的打砖块游戏已经设计好了。

  • 相关阅读:
    QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)
    C++与QML混合编程实现2048
    Qt Resource系统概说(资源压缩不压缩都可以)
    QML动画概述(几十篇相关博客)
    凤年读史27:普鲁士vs德意志
    DIP、IoC、DI以及IoC容器
    WebService和AngularJS实现模糊过滤查询
    详解SpringMVC请求的时候是如何找到正确的Controller
    .NET MVC学习之模型绑定
    Unit Of Work-工作单元
  • 原文地址:https://www.cnblogs.com/bite_the_bullet/p/2454113.html
Copyright © 2020-2023  润新知