정점 세트에서 평면의 법선 벡터를 얻으려면 어떻게해야합니까?


9

그래픽 작업을 진행하기 위해 HLSL / C ++ 작은 프로젝트를 진행 중이며 정점 다각형에서 벡터를 얻는 방법을 잘 모르겠습니다. 수식을 찾지 못하는 것 같습니다.

위치는 P1, P2, P3

예를 들어 P1.x, P1.y, P1.z를 사용하여 클래스 VertexPoint라고합시다.


밀접하게 관련된 질문 : gamedev.stackexchange.com/questions/11520/…
jhocking

정확성을 위해 그림과 질문 제목의 레이블 은 "정규화 된 벡터"대신 " 정규 벡터 " 여야합니다 . 법선 벡터 자체는 물론 정규화 될 수 있지만 (길이는 단일) 필요하지 않으며 교차 곱은 기본적으로 정규화 된 벡터를 생성하지 않습니다.
jjmontes 2016 년

1
Google에 명백한 인터넷 검색 '일반 벡터 삼각형'은 수백만의 조회수를 제공합니다. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett

... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett

2
... 14 , 15 , 16 , 17 ...이 모든 것 (그리고 의심 할 여지없이 많은 다른 사람들)이이 질문에 대답합니다. 실제로 일부는 원하는 C ++ / HLSL 코드를 가지고 있습니다. 진심으로. 이 질문은 너무나 치중되어 "중복"이라고 부릅니다. 내 주장은 "공식을 찾을 수없는 것 같습니다"– 당신은 시도 하지 않았습니다 .
imallett

답변:


28

V1 = P2-P1 및 V2 = P3-P1의 두 벡터를 계산하여 법선을 쉽게 찾은 다음 교차 곱 N = V1 x V2를 찾을 수 있습니다. 그런 다음 N을 정규화합니다. 정점의 순서 (시계 방향 또는 시계 반대 방향)에 따라 앞면 또는 뒷면을 향하는 법선이 나타납니다.

또한 다른 점을 선택해야하는 경우 세 개의 세 점이 정렬되지 않았는지 확인해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.