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. 【软件工程】RUP与软件开发5大模型
  2. selenium 获取href find_element_by_xpath
  3. pdf屏幕取词 android,===C#屏幕取词Demo热键版鼠标划词版【含语音版】【附源码】===...
  4. 【NLP】Task5:神经网络基础
  5. mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)
  6. JavaScript回调函数(callback)概念和应用,千万别错过!
  7. ostu进行遥感图像的分割
  8. 技术人员如何创业《四》- 打造超强执行力团队(转载)
  9. R语言第五讲 之R语言 变量
  10. java枚举类型转换为Struts2的select的数据
  11. JavaScript 常用数组函数方法专题
  12. mysql主主同步机制+keepalived实现MySQL高可用
  13. 根据小米商城官网首页效果敲写页面
  14. SAP错误消息调试之七种武器:让所有的错误消息都能被定位
  15. 小米手机只能进fastboot怎么办?
  16. Android M 差分包的制作流程
  17. 诺基亚 and 微软,两只大象能否共舞?
  18. OpenCV fitline直线拟合函数学习
  19. 基于MT7688模块的开发笔记12——给MT7688开发板添加WiFi功能
  20. 栈展开(stack unwinding)

热门文章

  1. GPS的Heading, Course, and Crab Angle不同与区别
  2. 微信号名称乱码什么情况_微信号注册为什么要辅助验证?
  3. Longhorn 云原生容器分布式存储 - 故障排除指南
  4. mfc 定时器绘制旋转六边形_OpenGL——旋转的六边形(动画)
  5. 解决windows 10下文件名太长无法删除的问题
  6. 西方哲学史的主要发展阶段
  7. linux gcc配置安装文件失败,安装一些环境时提示安装不成功帮一下看看什么情况(apt-get install gcc g++ ssh...
  8. mysql实现经纬度查询并按距离排序
  9. ROS三轮全向轮移动底盘 (01)
  10. table 手机 滑动_移动端touch事件滚动