【第004问 Unity中如何快捷查看Mesh的Normal?】

一、如何在Unity中快捷查看Cube、Circle等模型的法线?

刚开始学习模型的法线的时候总是想看看法线在哪里,是怎么表现的。当然你可以直接使用Blender或者3D max等工具查看。如果在Unity中我怎么样能够快速的查看一个模型的法线,下面就先看看几个效果;然后附上源码:

1. 查看Cube的Normal
在这里插入图片描述

从上面的Cube中可以看到每个顶点都有3个法线,因为一个每个顶点都被3个面所共用

2.查看Sphere的法线:
在这里插入图片描述

可以看到Sphere的法线是不是想刺猬一样,每个顶点的法线都可以清晰看见

3.查看Plane的法线
在这里插入图片描述

平面的法线可以清晰看到每个三角形顶点的法线

二、代码和操作步骤

  1. 模型必须要有MeshFilter
  2. MeshFilter必须要有Mesh
  3. 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】

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值