Unity中如何查看三角形的中心法线

在004中可以快速的查看每个顶点的法线,那么如何查看每个三角形的中心法线呢?

一、先看看具体查看三角形中心法线的动画效果

  1. 查看Plane中每个三角形的中心法线
  2. 查看Cube中每个三角形的中心法线
  3. 查看Capsule中每个三角形的法线

    以上就是通过对三种Unity自带3D Object的三角形中心法线的查看,相对来说还是比较直观的,个人觉得对于学习还是比较友好。

二、显示三角形中心法线步骤

  1. 获取三角形顶点
  2. 每3个顶点分成一个三角形
  3. 根据三角形3个顶点计算出两个向量,注意顺序【顺时针和逆时针】
  4. 根据两个向量使用Vector3.Cross计算出垂直于三角形的法线
  5. 根据3个顶点计算出三角形的中心点
  6. 根据中心点和法线绘制出每个三角形的中心显示法线

三、具体源码

using UnityEngine;
using UnityEditor;[CustomEditor(typeof(MeshFilter))]
public class ShowTrianglesNormals : Editor
{private MeshFilter meshFilter;private Mesh mesh;//顶点数组private Vector3[] vertices;private void OnEnable(){meshFilter = target as MeshFilter;if (meshFilter != null)mesh = meshFilter.sharedMesh;}/// <summary>/// 场景绘制/// </summary>private void OnSceneGUI(){if (mesh != null){//当前对象的操做从局部空间转换到世界空间 这样在下面的操作位置即可同步 否则位置是不会同步的Handles.matrix = meshFilter.transform.localToWorldMatrix;vertices = mesh.vertices; //计算面的法线//总的三角形索引int[] triangles = mesh.triangles;//总的三角形个数int triangelCount = triangles.Length / 3;Handles.color = Color.magenta;//计算出每个三角形的法线for (int i = 0; i < triangelCount; i++){int index = i * 3;//计算每个三角形的法线 Vector3 vertext_start = vertices[triangles[index]];Vector3 vertext_middle = vertices[triangles[index + 1]];Vector3 vertext_end = vertices[triangles[index + 2]];//计算三角形的法线 这里需要区分顺时针和逆时针的问题Vector3 startToMiddle = vertext_middle - vertext_start;Vector3 middleToEnd = vertext_end - vertext_middle;//计算出三角形的中心点 Vector3 triangleCenter = Vector3.zero;triangleCenter.x = (vertext_start.x + vertext_middle.x + vertext_end.x) / 3.0f;triangleCenter.z = (vertext_start.z + vertext_middle.z + vertext_end.z) / 3.0f;triangleCenter.y = (vertext_start.y + vertext_middle.y + vertext_end.y) / 3.0f;//计算法线 这里注意计算法线采用的是顺时针还是逆时针的问题 如果是逆时针 法线则会相反Vector3 normal = Vector3.Cross(startToMiddle, middleToEnd).normalized;Handles.DrawLine(triangleCenter, triangleCenter + normal);}}}
}

结语:…何为自由?【valaki】

【第005问 Unity中如何显示三角形中心法线?】相关推荐

  1. Unity中TextMeshPro显示中文

    首先在unity上方的导航栏中找到Windows点击在下拉栏中选择TextMeshPro里的Font Asset Creator来创建一个中文字体资源,选择一个Source Font File(可以通 ...

  2. 【Unity】在Unity中实时显示北京时间

    感觉在网上搜到的大部分Unity或者C#获取北京时间的方法都已经不提供服务了,搜到一个可用的稍微拓展下做成了实时显示北京时间的脚本. 但因为只在程序启动的时候有获取北京时间,接下来显示的时间都是每秒钟 ...

  3. unity中text显示中文乱码问题

    在本地c盘--windows--fonts中找一款字体复制(最好找那种不禁止商用的字体) 回到unity项目中,粘贴进Assets中的TextMeshPro-Fonts,(或者直接拖入Assets中, ...

  4. unity中RenderTexture显示图片中如何带透明通道

    这里准备了两个相机,一个用于显示ui界面,一个用于显示需要使用rt的相机,如下: 我们将Canvas模式改为camera给到UICamera,设置culling mask为ui: 接下来,在model ...

  5. unity中凹凸贴图、法线贴图、视差贴图和位移贴图

    凹凸贴图 ((更多资源资料下载群:193521697邀请码:10026)) 对于凹凸贴图在计算机图形领域中的研究,最早开始于70年代末,至今已经有接近30年历史了.NormalMap只是一种目前很流行 ...

  6. unity中添加中文字体实现UI可视化设计

    第一步:打开C盘下的Windows中的Fonts字体并选择一款喜欢的字体.路径为:C:\Windows\Fonts 第二步:将复制的字体放到unity项目下的Scenes文件下: 第三步:新建一个tx ...

  7. Unity中导入外部模型与预制件

    前言: 在Unity3D的 Asset Store  中下载的包(package)资源, 其默认位置是: C:\Users\用户名\AppData\Roaming\Unity\Asset Store- ...

  8. echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?

    编者按 在日常开发中,通常说到优化.提高帧率时,总是会提到批量渲染.之前简单总结了静态合批(点此查看全文)以及动态合批(点此查看全文),这次作者将和大家聊聊实例化渲染. 作者:枸杞忧天 (本文内容由公 ...

  9. 浅谈Unity中的文字显示

    以UGUI系统为例,字体分为内置字体.外部导入字体.自定义字体. 文字一般通过Text组件进行显示.目前Unity已经官方支持TextMeshPro,因此也有一些文字通过TextMeshPro-Tex ...

  10. Unity中帧数FPS的显示查看

    Unity中帧数FPS的显示查看 显示帧数 开发测试时的Game视图 开发测试时的Profiler视图 发布后的FPS显示 显示帧数 FPS可以用3中方式查看: 开发测试时的Game视图 如下图显示的 ...

最新文章

  1. python中color的用法_python - 如何为热图(使用plt.pcolor创建)中的NaN单元分配特定的颜色或图案,并使其显示在颜色栏中(图colorbar) - 堆栈内存溢出...
  2. 三、【SAP-PM模块】PM模块主数据
  3. python求最大连续子数组
  4. 关于分区索引与全局索引性能比较的示例
  5. ReactDom.render和React.render的区别
  6. Android官方开发文档Training系列课程中文版:分享文件之请求一个共享文件
  7. Selenium Web 自动化 - 项目实战(三)
  8. BIOS中的UEFI和Legacy启动模式
  9. PHP一阶段 html+css+js 练习题汇总
  10. day48 Pyhton 数据库Mysql 05
  11. 凸优化读书笔记01(仿射集合、仿射组合,仿射包)
  12. 记一次使用verdaccio 搭建本地私有npm服务器
  13. 作为一个程序员,至少需要掌握哪几种编程语言?
  14. 【敏捷开发每日一贴】用户故事Userstory
  15. 哈工大SCIR出品《自然语言处理》新书,无套路送5本!
  16. C波段、KU波段与雨衰现象
  17. 求生之路2 服务器 修改难度,求生之路2服务器指令及难度参数设置
  18. C语言英尺英寸和米的转换
  19. Python爬虫的起点!学爬虫从起点开始!
  20. FlinkSQL to Kafka连接器报错:could not find any factory for identifier ‘kafka‘ that implements

热门文章

  1. echarts的x轴去掉网格线
  2. 雅虎谷歌恩怨回顾:养虎为患自食苦果
  3. 文章原创度php,度_原创文章_文章吧
  4. 本地缓存之LIFO、LRU、FIFO、LFU实现
  5. QT学习笔记(一)之本地播放器
  6. 天啦噜!知道硬盘很慢,但没想到比 CPU L1 Cache 慢 10000000 倍
  7. 测试分享之抽奖【二】
  8. 叶脊网络架构(Spine-Leaf)
  9. linux mud 游戏,150919神奇的mud
  10. 找不到设备 将计算机连接到USB打印机,打印机连接电脑没反应怎么办