Debug용 법선을 Unity로 표시
5664 단어 Unity
using UnityEngine;
[ExecuteInEditMode]
public class NormalHelper : MonoBehaviour {
public float length = 1;
public Vector3 bias;
void Update() {
var meshFilt = GetComponent<MeshFilter>();
if (meshFilt == null) return;
var mesh = meshFilt.mesh;
Vector3[] vertices = mesh.vertices;
Vector3[] normals = mesh.normals;
for (var i = 0; i < normals.Length; i++)
{
Vector3 pos = vertices[i];
pos.x *= transform.localScale.x;
pos.y *= transform.localScale.y;
pos.z *= transform.localScale.z;
pos += transform.position + bias;
Debug.DrawLine
(
pos,
pos + normals[i] * length, Color.red);
}
}
}
Tangent 버전을 추가했습니다.
using UnityEngine;
[ExecuteInEditMode]
public class NormalHelper : MonoBehaviour {
public float length = 1;
public Vector3 bias;
void Update() {
var meshFilt = GetComponent<MeshFilter>();
if (meshFilt == null) return;
var mesh = meshFilt.mesh;
Vector3[] vertices = mesh.vertices;
Vector3[] normals = mesh.normals;
Vector4[] tangent = mesh.tangents;
for (var i = 0; i < normals.Length; i++)
{
Vector3 pos = vertices[i];
pos.x *= transform.localScale.x;
pos.y *= transform.localScale.y;
pos.z *= transform.localScale.z;
pos += transform.position + bias;
//normal
Debug.DrawLine
(
pos,
pos + normals[i] * length,
Color.red
);
//ついでにtangentも可視化
Debug.DrawLine
(
pos,
pos + new Vector3(
tangent[i].x,
tangent[i].y,
tangent[i].z
) * length,
Color.blue
);
}
}
}
Reference
이 문제에 관하여(Debug용 법선을 Unity로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitasenjudesign/items/f718e2b422c7032a2106텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)