입사벡터 P와 법선벡터 n이 주어졌을 때, 반사벡터 R은 벡터 P와 크기가 같고, 입사각과 반사각이 같음을 확인할 수 있다.
여기서 정반사는 입사벡터와 반사벡터의 크기가 같고, 입사각과 반사각의 크기가 같은것을 말한다.
Unity : 법선에 의해 정의된 평면에서 벡터를 반사한다. 벡터 'inNormal'는 평면을 정의하며(평면의 법선은 표면에 수직인 벡터이다.), 벡터 'inDirection'는 평면으로 들어오는 방향 화살표로 처리된다.
반환된 값의 크기는 동일한 inDirection이지만, 방향이 반영된 벡터이다.
우선, 입사 벡터 P의 역벡터 -P를 n의 연장선 상에 투영시켜, 투영벡터 n(-P·n)
를 구한다.
입사 벡터 P의 시작 위치를 원점에 위치시키고, 여기에 n(-P·n)를 더하면, 입사면에 투영된 벡터의 위치를 구할 수 있다.
위 그림을 보면, 입사벡터 P에 n(-P·n)를 1번 더하면, 입사면에 투영된 위치를 구할 수 있고, 2번 더하면 반사벡터 R을 구할 수 있다.
결국, 반사벡터 R은 R = P + 2n(-P·n)
로 구할 수 있다.
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Transform originalObject;
public Transform reflectedObject;
void Update() {
reflectedObject.position = Vector3.Reflect(originalObject.position, Vector3.right);
}
}
출처 :