Action disabled: source

일반/수직 벡터의 계산

일반 벡터(예를 들면 평면에 수직인 벡터)는 메쉬(mesh) 생성에 자주 필요하며 경로 추적과 다른 상황에서도 유용할 수 있습니다. 예를 들면 메쉬 삼각면의 세 모서리와 같이 평면에서 세 점이 주어졌다면, 노멀(normal)을 찾는 것은 어렵지 않습니다. 세 개의 점 중 어느 것이든 골라서, 두 벡터를 제공하기 위해 별도로 두 개의 다른 지점에서 빼면 됩니다:-

var a: Vector3;
var b: Vector3;
var c: Vector3;
 
var side1: Vector3 = b - a;
var side2: Vector3 = c - a;

이 두 벡터의 벡터적은 표면과 직각하는 세 번째 벡터를 생성할 것 입니다. "왼손의 법칙"은 벡터적 공식에서 두 벡터가 지나가야 하는 순서를 정하는 데 유용할 것 입니다. 사용자가 표면의 맨 위쪽을 본다면 (거기서부터 노멀이 바깥으로 가리킴) 첫 번째 벡터는 두 번째 벡터 주위에 시계방향으로 펼쳐질 것 입니다:-

var perp: Vector3 = Vector3.Cross(side1, side2);

만일 벡터의 순서가 반대로 되었다면 이 결과는 정확하게 정반대의 방향을 가리킬 것입니다.

메쉬에 대해서는, 노멀 벡터 역시 정규화 되어야 합니다. 이는 정규화된 속성으로 이룰 수 있으나, 가끔 유용할 수 있든 또 다른 트릭이 있습니다. 사용자는 그것의 크기로 그것을 나눔으로써 또한 수직 벡터를 정규화할 수 있습니다: -

var perpLength = perp.magnitude;
perp /= perpLength;

그 삼각형의 면적은 perpLength / 2와 같습니다. 이는 사용자가 메쉬 전체의 표면적을 찾아야 하거나 혹은 그 상대적 면적에 기반한 확률로 무작위로 삼각형을 선택하려는 경우에 유용합니다.

역링크