객체에 변형이 적용된 3D 장면을 렌더링 할 때는 모델 뷰 행렬의 역 수치로 법선을 변형해야합니다. 따라서 법선 인 modelViewMatrix 을 사용하면 변환 된 법선 은
객체를 변환 할 때 그에 따라 법선을 변환해야합니다. 그러나 왜 수학적으로 이것이 대응하는 변환 행렬입니까?
객체에 변형이 적용된 3D 장면을 렌더링 할 때는 모델 뷰 행렬의 역 수치로 법선을 변형해야합니다. 따라서 법선 인 modelViewMatrix 을 사용하면 변환 된 법선 은
객체를 변환 할 때 그에 따라 법선을 변환해야합니다. 그러나 왜 수학적으로 이것이 대응하는 변환 행렬입니까?
답변:
다음은 역전 치가 필요하다는 간단한 증거입니다. 평면 방정식 정의 된 평면이 있다고 가정 합니다. 여기서 은 법선입니다. 이제이 평면을 행렬 으로 변환하고 싶습니다 . 즉, 이전 평면 방정식을 만족하는 정확히 동일한 값에 대해 만족 되는 새로운 평면 방정식 을 찾고 싶습니다 .n M n ′ ⋅ M x + d ′ = 0 x
이렇게하려면 두 평면 방정식을 동일하게 설정하면됩니다. (이것은 임의로 평면 방정식을 재조정하는 능력을 포기하지만 인수에 중요하지 않습니다.) 그런 다음 설정 하고 빼는 것이 가능합니다. 우리가 남긴 것은 :
이것을 행렬 표기법으로 표현 된 내적 (1 열 행렬로 벡터를 생각할 때)으로 다시 작성하겠습니다.
이제 모든 대해 이것을 만족 시키려면 다음이 있어야합니다.
지금은 해결 의 측면에서 , n
프레스토 악장! 점 가 행렬 로 변환 되면 평면 법선 을 유지하기 위해 평면 법선이 의 역전 치로 변환되어야합니다 .
이것은 기본적으로 내적의 속성입니다. 변환이 적용될 때 내적 (dot product)이 변하지 않고 유지되도록하기 위해, 점이 찍힌 두 벡터는 대응하지만 다른 방식으로 변환되어야한다.
수학적으로,이 법선 벡터는 일반 벡터 아니라고 말에 의해 설명 될 수 있지만, 일이라는 covector을 (일명 공변 벡터, 듀얼 벡터, 또는 선형 형태). 코 벡터는 기본적으로 "불변 스칼라를 생성하기 위해 벡터로 점을 찍을 수있는 것"으로 정의됩니다. 이를 달성하기 위해서는 일반 벡터에서 작동하는 모든 매트릭스의 역 전치를 사용하여 변환해야합니다. 이것은 여러 차원에서 유지됩니다.
구체적으로 3D에서 바이 벡터는 코 벡터와 유사합니다. 그들은 아니에요 확실히 서로 다른 단위를 가지고 있기 때문에 같은하십시오 bivector 그들이 스케일링에 따라 다르게 작동 할 수 있도록 길이의 단위 (지역)의 제곱가있을 때 covector이 역 길이의 단위를 가지고있다. 그러나 방향과 관련하여 동일한 방식으로 변환되므로 법선에 중요합니다. 우리는 보통 법선의 크기에 신경 쓰지 않고 (어쨌든 항상 단위 길이로 정규화합니다), 일반적으로 바이 벡터와 코 벡터의 차이점에 대해 걱정할 필요가 없습니다.
이것은 법선이 실제로 벡터가 아니기 때문입니다! 교차 곱으로 생성되므로 벡터가 아닌 바이 벡터 가 생성됩니다 . 대수는 이러한 좌표에 대해 매우 다르게 작동하며 기하 변환은 다르게 동작하는 하나의 작업 일뿐입니다.
이에 대한 자세한 정보는 Eric Lengyel의 Grassman Algebra 프레젠테이션입니다 .