不管是在GL下绘图还是在Gizmos下绘制,使用世界坐标确定点的位置很多时候是很麻烦的,通常使用物体自身的坐标会比较简单,但是GL和Gizmos都是针对世界坐标绘制,这就需要把自身坐标转换成世界坐标。以前都是很笨的把所有的点的位置通过transform.TransformPoint方法转换到世界坐标下,或者把基于自身的矢量通过transform.TransformDirection方法转换成基于世界坐标的矢量。虽然说运行都是对的,但是代码量就比较大,有点儿烦。

下面这行代码:

GL.MultMatrix(transform.localToWorldMatrix);

它的意思是后面进行的GL绘制的点的位置都会与这行代码提供的矩阵相乘,从而使这些点从基于这个transform自身的坐标转换到世界坐标下。这样在这行代码后面写的点坐标或者方向矢量都基于自身坐标就可以了,虽然这么做对于计算机来说也许运算量并没有什么区别,但是至少代码量是减少了很多,至少看起来优雅吧。

同理,Gizmos的绘制也使用类似的方式,看下面这行代码:

Gizmos.matrix = transform.localToWorldMatrix;

有了这行代码之后,其后面的点坐标统一使用自身坐标就可以了,Unity会自动转换成世界坐标,同理是不改变运算量,但是代码简化了:)

其实以前也看别人写过这种代码,但是没弄明白为什么这么写,今天随手翻书看了一下《Unity Shader入门精要》的第四章里面的"矩阵的几何意义"和"坐标空间"两个小节,忽然明白了那些人写这种代码是啥意思,回头马上把以前的代码优化一下,看看效果,呵呵,居然省了大把的代码。哎,搞了这么多年Unity,才明白这点儿事儿,惭愧...

好在开卷有益!

Unity关于GL绘制和Gizmos绘制的Matrix问题。相关推荐

  1. Unity Gizmos 绘制 Camera 的 视口、视锥和 FOV

    Unity Gizmos 绘制 Camera 的 视口.视锥和 FOV 一.目的 由于开发需要,需要绘制出Camera 的 视口.视锥和 FOV 以便于观察游戏物体与camera之间的一些关系,以利于 ...

  2. Unity中通过Gizmos绘制OverlapBox

    OverlapBox的绘制问题 我们发现Gizmos没有直接绘制OverlapBox的API,所以只能借助DrawLine来间接绘制OverlapBox,所以首先我们需要计算出Box四个顶点的坐标公式 ...

  3. ue4 unreal4 自定义网格 绘制自定义网格 绘制面 (Plus)

    额四月份写了 CustomMeshComponent 用于创建自定义网格 ue4 unreal4 自定义网格 绘制自定义网格 绘制面_ljason1993的博客-CSDN博客 当时想着找时间写个 Pr ...

  4. [Unity基础]GL图像库

    GL图像库主要用来绘制常见的2d和3d几何图形.使用GL图像库,可在屏幕中绘制2d几何图形,并且该几何图形将永远显示在屏幕当中,不会因为摄像机的移动而改变. 值得注意的是,绘制2d图像时,需要使用GL ...

  5. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )

    文章目录 一.绘制单个点 二.绘制多个点 三.相关资源 在上一篇博客 [OpenGL]十.OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | ...

  6. html5 绘制图形,HTML5绘制几何图形

    绘制几何图形 var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext(" ...

  7. OPenGL实例化绘制、普通绘制说明

    OpenGL 实例化(Instancing)是一种只调用一次渲染函数就能绘制出不少物体的技术,能够实现将数据一次性而不是多次发送给 GPU ,告诉 OpenGL使用一个绘制函数,将这些数据绘制成多个物 ...

  8. python turtle绘制柱状图_python绘制图形(Turtle模块)

    用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...

  9. 【opencv图像处理】--2. 颜色空间,绘制图形,绘制(中文)文本

    "人群里敞着一扇门" 1. 颜色空间的基础知识 1.1 色彩空间转换 2. mat数据结构的深浅拷贝 ndarray的常见属性 3.颜色通道的分离和合并 4. 绘制图形 5. 绘制 ...

最新文章

  1. 解题报告:AcWing 352. 闇の連鎖(树上差分、方案统计)
  2. VirtualBox uuid冲突问题
  3. UVa11300 Spreading the Wealth(数学问题)
  4. sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)
  5. 自用的获取时间 传值是获取剩余时间 不传是获取当前时间
  6. python day3 python基础
  7. MateBook14一个多月的使用体验(开发向)
  8. Maven项目代码中定位resources文件夹下的文件目录,解决文件不存在的问题
  9. 一入python深似海--正則表達式
  10. 为什么Linux不需要磁盘碎片整理
  11. 什么是DNS云解析?云解析和普通解析有什么区别?
  12. SwiftUI学习笔记-【列表】
  13. ALM / QC 64-bit Patch 12 S-Chinese
  14. Python中文文本分句
  15. Android属性动画,和ButterKnife的使用方法
  16. securecrt 不掉线_如何不掉线
  17. java实现html页面转pdf解决方案_[Java教程]纯js实现html转pdf
  18. 是什么让数据分析软件SAS风靡全球
  19. linux上下左右为ABCD
  20. Spring注解开发以及基于java的容器配置

热门文章

  1. 双月湾海边+农家乐模式市场调研报告
  2. 数据库原理实验2:使用Select语句查询数据(一)——简单查询
  3. 跑通AttnGAN (Python 3, Pytorch 1.0) -- coco
  4. 2019-2020-2 大学物理Ⅱ 答案+解题过程自用
  5. I2S/(PCM/TDM)/AC97/PDM区别(二十)
  6. 2020年PHP面试题
  7. winform数据存储的方式
  8. k8s 入门-minikube部署应用和基本概念
  9. uestc 1899 P酱的冒险旅途
  10. pkpm服务器修改数据,我用pkpm出了一张基础平面布置图,如何把图中间的基础变成联合基础?应该在satwe里改些什么数据?...