刚开始学习模型的法线的时候总是想看看法线在哪里,是怎么表现的。当然你可以直接使用Blender或者3D max等工具查看。如果在Unity中我怎么样能够快速的查看一个模型的法线,下面就先看看几个效果;然后附上源码:
1. 查看Cube的Normal
从上面的Cube中可以看到每个顶点都有3个法线,因为一个每个顶点都被3个面所共用
2.查看Sphere的法线:
可以看到Sphere的法线是不是想刺猬一样,每个顶点的法线都可以清晰看见
3.查看Plane的法线
平面的法线可以清晰看到每个三角形顶点的法线
源码如下:
using UnityEngine; using UnityEditor; [CustomEditor(typeof(MeshFilter))] public class ShowNormals : Editor { private MeshFilter meshFilter; private Mesh mesh; //顶点个数 private int vertextCount; //顶点数组 private Vector3[] vertices; //顶点法线 private Vector3[] normals; 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; Handles.color = Color.green; vertices = mesh.vertices; normals = mesh.normals; vertextCount = mesh.vertices.Length; //采用从顶点的位置[法线的起点】到法线的终点位置,既可以显示出当前顶点的法线 for (int index = 0; index < vertextCount; index++) { Handles.DrawLine(vertices[index], vertices[index] + normals[index]); } } } }
结语: 法线的可视化对于法线的学习,很有帮助-【valaki】