尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

在Unity中生成物体的OBB

在Unity中生成物体的OBB 项目需要计算物体的以局部坐标系为基准的长宽高,用来做3D物体的材质赋值了图片之后,能够正确拉伸物体来让图片按照正确的比例显示, 这不是OBB嘛,但是Unity提供的MeshRenderer的Bounds是AABB,Unity也没有提供其他关于OBB的属性或者组件等。因为一直为相当多的功能提供支持, 后面就一直在维护和扩展着这个库。最开始的思路所以思路是通过AABB求出OBB通过重新计算mesh上面的每个顶点,求出OBB.思路一一开始我是觉得无解的,后面在对OBB做了比较多的应用拓展之后觉得, 将AABB上的八个端点转换到OBB的物体的局部坐标中,因为这八个端点的各个分量各自代表了AABB在世界坐标系中的最大分量或者最小分量,将这八个点转换到局部坐标后,对各个分量进行比较,得到各个分量的最大和最小值,这些值最后就可以生成OBB了。 这个思路和将其他的OBB包含在里面是差不多的, 感觉是可行的,但是思路一的方法我没有去实现。思路二自己有以往的经验,能够想到大体的解决思路。只是这种在单核CPU遍历顶点的方法可能会造成卡顿,所以这个方法的升级版就是用多线程或者协程来做。在遍历顶点计算AABB的时候,是根据每个顶点的世界坐标,然后记录当前的所有顶点坐标xyz三个分量的最大值和最小值,最后xyz每一位都有最大值和最小值,三个位组成八种组合就代表了这个AABB的八个面。那么遍历顶点计算OBB的时候,比AABB只是多了一步,就是先将顶点从世界坐标转换到模型空间坐标。上面的是比较早期的想法, 现在已经支持几种方式创建OBB了。这个OBB包的可视化调试需要导入配合3D调试工具,链接: 3D点线调试工具 否则一进去会报错,或者注释可视化调试的代码也可以。众所周知,已经有RunTimeLevelDesign这款插件能够从AABB求出OBB
返回列表