本来是想写一个求A物体在B物体坐标系下的坐标。

写完了才发现有worldToLocalMatrix这个函数,后来查了查还有InverseTransformPoint这个函数。。。

没看API就直接写真血亏。

算了,就当是一次详解吧,直接上代码。

  Vector3 world2Local(Transform _worldPosition) {Matrix4x4 trans = new Matrix4x4(new Vector4(1, 0, 0, 0),new Vector4(0, 1, 0, 0),new Vector4(0, 0, 1, 0),new Vector4(-transform.position.x, -transform.position.y, -transform.position.z, 1));Matrix4x4 rotZ = new Matrix4x4(new Vector4(Mathf.Cos(-transform.eulerAngles.z * Mathf.PI / 180), Mathf.Sin(-transform.eulerAngles.z * Mathf.PI / 180), 0, 0),new Vector4(-Mathf.Sin(-transform.eulerAngles.z * Mathf.PI / 180), Mathf.Cos(-transform.eulerAngles.z * Mathf.PI / 180), 0, 0),new Vector4(0, 0, 1, 0),new Vector4(0, 0, 0, 1));Matrix4x4 rotX = new Matrix4x4(new Vector4(1, 0, 0, 0),new Vector4(0, Mathf.Cos(-transform.eulerAngles.x * Mathf.PI / 180), Mathf.Sin(-transform.eulerAngles.x * Mathf.PI / 180), 0),new Vector4(0, -Mathf.Sin(-transform.eulerAngles.x * Mathf.PI / 180), Mathf.Cos(-transform.eulerAngles.x * Mathf.PI / 180), 0),new Vector4(0, 0, 0, 1));Matrix4x4 rotY = new Matrix4x4(new Vector4(Mathf.Cos(-transform.eulerAngles.y * Mathf.PI / 180), 0, -Mathf.Sin(-transform.eulerAngles.y * Mathf.PI / 180), 0),new Vector4(0, 1, 0, 0),new Vector4(Mathf.Sin(-transform.eulerAngles.y * Mathf.PI / 180), 0, Mathf.Cos(-transform.eulerAngles.y * Mathf.PI / 180), 0),new Vector4(0, 0, 0, 1));Matrix4x4 Mview = (new Matrix4x4(new Vector4(1, 0, 0, 0),new Vector4(0, 1, 0, 0),new Vector4(0, 0, 1, 0),new Vector4(0, 0, 0, 1))) * rotZ * rotX * rotY * trans;Vector4 Pworld = new Vector4(_worldPosition.position.x, _worldPosition.position.y, _worldPosition.position.z, 1);Vector3 PLocal = Mview * Pworld;//Vector4 Pcamera = transform.worldToLocalMatrix * Pworld;Debug.Log(PLocal);return PLocal;}

就这样吧,注意Mview中rotZ*rotX*rotY*trans,

因为平常是先旋转再平移,所以这里要先平移再旋转,并且平常是先转z再转x再转y,所以这里是先y再x再z,详情请看unity shader 入门精要第67 和第76页。

详解unity中tranform.worldToLocalMatrix相关推荐

  1. 详解Unity中的粒子系统Particle System (七)

    前言 本篇来讲一讲Collision和Triggers模块,这两个模块主要用于粒子系统与物理世界的交互,一个是碰撞器,另一个是触发器.有了这两个模块我们又可以做出更炫酷的粒子效果啦! 目录 前言 本系 ...

  2. 详解Unity中的粒子系统Particle System (十二 | 终)

    前言 终于来到了最后一篇,粒子系统宣告终结!这十来篇博客删删改改写了半个多月,真是离谱.今天该讲案例与粒子系统的应用,那么我们就进入正题吧! 目录 前言 本系列提要 一.如何做出效果 二.案例演示 1 ...

  3. 详解Unity中的粒子系统Particle System (二)

    前言 上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解.从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状 ...

  4. 详解Unity中的粒子系统Particle System (四)

    前言 上一篇我们主要讲解了Shape形状模块,以及Emission发射模块,这是粒子系统中最为重要的两个模块,学会了它们我们足以做出惊艳的效果,比如霰弹枪的发射,蘑菇蛋的冲击波等等.本篇讲的内容依旧重 ...

  5. 详解Unity中的粒子系统Particle System (十一)

    前言 今天讲最后一个模块--External Forces,该模块需要和Force Field组件配合使用,作用是模拟物理的力对粒子的影响.至此,Unity内置粒子系统的最后一块物理砖补齐,理论上来讲 ...

  6. 详解Unity中的粒子系统Particle System (八)

    前言 书接上回,咱们继续讲粒子系统,本篇该说Inherit Velocity和Sub Emitters这两个模块,依旧是重量级选手,特别是Sub Emitters这个模块,有了它,我们的粒子效果可以做 ...

  7. 详解Unity中的粒子系统Particle System (九)

    前言 今天讲Texture Sheet Animation模块,先前我们已经讲了很多很多模块,通过上述模块可以实现很酷的效果,但是缺了一点真实感.比如说爆炸特效,仅指望单独的粒子来模拟真实的爆炸效果是 ...

  8. 详解Unity中的车轮碰撞器Wheel Collider

    前言 碰撞体组件定义了物体的物理性状,Unity中有一系列基本碰撞体,我们可以使用它们组合成任意形状,但除了基本碰撞体之外,Untiy还提供了诸如车轮(Wheel).网格(Mesh).地形(Terra ...

  9. 详解Unity中的粒子系统Particle System (三)

    前言 上一篇我们详细讲解了有关主模块的全部内容,已经对粒子系统的基本运作有了足够的了解,本篇就来讲一下被粒子系统默认启用的Emission.Shape.Renderer模块又在粒子系统中扮演着怎么样的 ...

最新文章

  1. FlexboxLayout使用(Google官方实现流式布局控件)
  2. 15数码 java,15数码问题
  3. C++实现选择排序(附完整源码)
  4. js中的Object.create(null) 和 {} 的区别
  5. SetConsoleCtrlHandler() -- 设置控制台信号处理函数
  6. ECharts 饼图 legend 样式修改
  7. php怎么读取mq的数据,php – 无法读取RabbitMQ的所有消息
  8. 华为鸿蒙os和麒麟os区别,麒麟、鸿蒙皆自研,为何华为不像苹果将系统同时推送?...
  9. NP、OSPF监测调试
  10. 计算机视觉实战(十一)Scale Invariant Feature Transform(SIFT)(附完整代码)
  11. 【图像去雾】基于matlab偏振水下模糊图像去雾【含Matlab源码 396期】
  12. vscode推荐编程字体
  13. Ubuntu16.04 安装火狐浏览器(中国版)
  14. python矩阵乘法和转置_python简单实现矩阵的乘,加,转置和逆运算示例
  15. Java JRE 6安全更新
  16. OpenFOAM当中监测力和阻力系数
  17. 基于facenet人脸识别设计文档
  18. java web视频学习-ServletContext和Request和Response
  19. matlab 标量双精度值,matlab数据类型(数值类型)
  20. 甲骨文混合云战略融合数据库技术

热门文章

  1. mysql数据库表锁、行锁
  2. Innodb中聚簇索引
  3. layui tab用法大全,一键复制粘贴即可使用
  4. Java 年轻代、年老代、GC
  5. 2011-2019 历届蓝桥杯——本科B组C/C++组别所有试题——详解大全
  6. git 删除本地未提交的内容
  7. 【图像处理】gamma校正通俗解释及python实现(替代matlab imadjust)
  8. @PersistenceContext 注解在spring中代理
  9. 【GAOPS047】GE口:SGMII模式和serdes模式
  10. Cadence IC617工艺库安装步骤