一、如何在Unity中快捷查看Cube、Circle等模型的法线?
刚开始学习模型的法线的时候总是想看看法线在哪里,是怎么表现的。当然你可以直接使用Blender或者3D max等工具查看。如果在Unity中我怎么样能够快速的查看一个模型的法线,下面就先看看几个效果;然后附上源码:
1. 查看Cube的Normal
从上面的Cube中可以看到每个顶点都有3个法线,因为一个每个顶点都被3个面所共用
2.查看Sphere的法线:
可以看到Sphere的法线是不是想刺猬一样,每个顶点的法线都可以清晰看见
3.查看Plane的法线
平面的法线可以清晰看到每个三角形顶点的法线
二、代码和操作步骤
- 模型必须要有MeshFilter
- MeshFilter必须要有Mesh
- MeshRender可以有也可以没有,如果没有你看到的只是Mesh,不能看到图片
源码如下:
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】