U3D 数学--Transform 分析

反编译的U3D 的Transform 的源码,研究了下里面的关于数学的一些借口,

发现有两个函数的实现有 性能问题。

如图

当relativeTo=Space.Self 的时候,其实直接改成

this.localPosition += translation; 接可以了。

其实底层存的应该都是localPosition. 即使算出了worldposition最终底层还是需要转换为localPosition的,如果节点的层级关系很多,

这样计算量就更大了。

测试1百万次6个节点的情况,调用Translate函数需要391毫秒。直接this.localPosition += translation 消耗135毫秒

 

Rotate函数在relativeTo == Space.World的情况下也有性能问题。

参考源码可以发现

     this.rotation *= (Quaternion.Inverse(this.rotation) * quaternion) * this.rotation;

等价于

this.rotation = quaternion * this.rotation;

 四元素是满足结合律的。

测试1百万次6个节点的情况,调用Translate函数需要718.1761毫秒。直接this.rotation = quaternion * this.rotation; 消耗421.4793毫秒

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值