【第005问 Unity中如何显示三角形中心法线?】
Unity中如何查看三角形的中心法线
在004中可以快速的查看每个顶点的法线,那么如何查看每个三角形的中心法线呢?
一、先看看具体查看三角形中心法线的动画效果
- 查看Plane中每个三角形的中心法线
- 查看Cube中每个三角形的中心法线
- 查看Capsule中每个三角形的法线
以上就是通过对三种Unity自带3D Object的三角形中心法线的查看,相对来说还是比较直观的,个人觉得对于学习还是比较友好。
二、显示三角形中心法线步骤
- 获取三角形顶点
- 每3个顶点分成一个三角形
- 根据三角形3个顶点计算出两个向量,注意顺序【顺时针和逆时针】
- 根据两个向量使用Vector3.Cross计算出垂直于三角形的法线
- 根据3个顶点计算出三角形的中心点
- 根据中心点和法线绘制出每个三角形的中心显示法线
三、具体源码
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中如何显示三角形中心法线?】相关推荐
- Unity中TextMeshPro显示中文
首先在unity上方的导航栏中找到Windows点击在下拉栏中选择TextMeshPro里的Font Asset Creator来创建一个中文字体资源,选择一个Source Font File(可以通 ...
- 【Unity】在Unity中实时显示北京时间
感觉在网上搜到的大部分Unity或者C#获取北京时间的方法都已经不提供服务了,搜到一个可用的稍微拓展下做成了实时显示北京时间的脚本. 但因为只在程序启动的时候有获取北京时间,接下来显示的时间都是每秒钟 ...
- unity中text显示中文乱码问题
在本地c盘--windows--fonts中找一款字体复制(最好找那种不禁止商用的字体) 回到unity项目中,粘贴进Assets中的TextMeshPro-Fonts,(或者直接拖入Assets中, ...
- unity中RenderTexture显示图片中如何带透明通道
这里准备了两个相机,一个用于显示ui界面,一个用于显示需要使用rt的相机,如下: 我们将Canvas模式改为camera给到UICamera,设置culling mask为ui: 接下来,在model ...
- unity中凹凸贴图、法线贴图、视差贴图和位移贴图
凹凸贴图 ((更多资源资料下载群:193521697邀请码:10026)) 对于凹凸贴图在计算机图形领域中的研究,最早开始于70年代末,至今已经有接近30年历史了.NormalMap只是一种目前很流行 ...
- unity中添加中文字体实现UI可视化设计
第一步:打开C盘下的Windows中的Fonts字体并选择一款喜欢的字体.路径为:C:\Windows\Fonts 第二步:将复制的字体放到unity项目下的Scenes文件下: 第三步:新建一个tx ...
- Unity中导入外部模型与预制件
前言: 在Unity3D的 Asset Store 中下载的包(package)资源, 其默认位置是: C:\Users\用户名\AppData\Roaming\Unity\Asset Store- ...
- echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?
编者按 在日常开发中,通常说到优化.提高帧率时,总是会提到批量渲染.之前简单总结了静态合批(点此查看全文)以及动态合批(点此查看全文),这次作者将和大家聊聊实例化渲染. 作者:枸杞忧天 (本文内容由公 ...
- 浅谈Unity中的文字显示
以UGUI系统为例,字体分为内置字体.外部导入字体.自定义字体. 文字一般通过Text组件进行显示.目前Unity已经官方支持TextMeshPro,因此也有一些文字通过TextMeshPro-Tex ...
- Unity中帧数FPS的显示查看
Unity中帧数FPS的显示查看 显示帧数 开发测试时的Game视图 开发测试时的Profiler视图 发布后的FPS显示 显示帧数 FPS可以用3中方式查看: 开发测试时的Game视图 如下图显示的 ...
最新文章
- python中color的用法_python - 如何为热图(使用plt.pcolor创建)中的NaN单元分配特定的颜色或图案,并使其显示在颜色栏中(图colorbar) - 堆栈内存溢出...
- 三、【SAP-PM模块】PM模块主数据
- python求最大连续子数组
- 关于分区索引与全局索引性能比较的示例
- ReactDom.render和React.render的区别
- Android官方开发文档Training系列课程中文版:分享文件之请求一个共享文件
- Selenium Web 自动化 - 项目实战(三)
- BIOS中的UEFI和Legacy启动模式
- PHP一阶段 html+css+js 练习题汇总
- day48 Pyhton 数据库Mysql 05
- 凸优化读书笔记01(仿射集合、仿射组合,仿射包)
- 记一次使用verdaccio 搭建本地私有npm服务器
- 作为一个程序员,至少需要掌握哪几种编程语言?
- 【敏捷开发每日一贴】用户故事Userstory
- 哈工大SCIR出品《自然语言处理》新书,无套路送5本!
- C波段、KU波段与雨衰现象
- 求生之路2 服务器 修改难度,求生之路2服务器指令及难度参数设置
- C语言英尺英寸和米的转换
- Python爬虫的起点!学爬虫从起点开始!
- FlinkSQL to Kafka连接器报错:could not find any factory for identifier ‘kafka‘ that implements