Quick Reference
무게중심좌표(barycentric coordinates)는 삼각형의 점 P를 꼭짓점 A, B, C의 가중합으로 나타내는 좌표입니다. 퇴화하지 않은 삼각형의 평면 위에서 가중치는 유일하며, 모두 0 이상이면 경계를 포함한 삼각형 안입니다.
P = λA A + λB B + λC C
λA + λB + λC = 1
A=(0,0), B=(4,0), C=(0,2), P=(1,0.5)
(λA,λB,λC) = (0.5,0.25,0.25)두 변을 기저로 풀기
A를 기준점으로 두면 P−A=λB(B−A)+λC(C−A)입니다. 두 변이 독립일 때 이 선형계로 두 계수를 구한 뒤 λA=1−λB−λC로 닫습니다. 임의의 2·3차원 삼각형에는 내적으로 구성한 다음 식을 사용할 수 있습니다.
e₀=B-A, e₁=C-A, r=P-A
d₀₀=e₀·e₀, d₀₁=e₀·e₁, d₁₁=e₁·e₁
d₂₀=r·e₀, d₂₁=r·e₁
D=d₀₀d₁₁-d₀₁²
λB=(d₁₁d₂₀-d₀₁d₂₁)/D
λC=(d₀₀d₂₁-d₀₁d₂₀)/D
λA=1-λB-λC앞의 예제에서는 d₀₀=16, d₀₁=0, d₁₁=4, d₂₀=4, d₂₁=1, D=64이므로 λB=λC=1/4입니다. D는 두 변이 만드는 평행사변형 넓이의 제곱입니다. 두 변이 종속이면 D=0이고 삼각형의 면적도 0이라 이 공식을 쓸 수 없습니다.
3차원에서 P가 삼각형 평면 밖에 있으면 이 내적 풀이는 P의 평면 위 직교 투영점의 좌표를 계산합니다. 따라서 가중치가 양수라는 이유만으로 P 자체가 삼각형 위라고 판정하면 안 됩니다. 평면 잔차 또는 P=λA A+λB B+λC C의 성립도 확인합니다. 평면 위 교차점을 먼저 얻는 과정은 광선 교차로 연결됩니다.
면적과 내부 판정
2차원에서는 orient(X,Y,Z)=(Yₓ−Xₓ)(Zᵧ−Xᵧ)−(Yᵧ−Xᵧ)(Zₓ−Xₓ)를 부호 있는 두 배 면적으로 사용할 수 있습니다.
λA=orient(P,B,C)/orient(A,B,C)
λB=orient(A,P,C)/orient(A,B,C)
λC=orient(A,B,P)/orient(A,B,C)
모든 λ가 양수 → 내부
λ 하나가 0, 나머지≥0 → 변 위
λ 두 개가 0 → 꼭짓점
λ 하나라도 음수 → 외부이 판정은 계수 합이 1인 비퇴화 삼각형의 평면 위 점을 전제로 합니다. 예를 들어 P=(4,2)는 (-1,1,1)로 표현되어 외부입니다. 분자에 절댓값을 적용하면 이 음수 정보가 사라집니다. 꼭짓점 순서를 바꾸면 가중치가 대응하는 꼭짓점도 함께 바뀌어야 합니다.
아주 가늘거나 크기가 극단적인 삼각형에서는 D 계산의 상쇄와 나눗셈 오차가 커집니다. 실수 수학의 내부 판정과 픽셀 경계의 샘플 소유 규칙은 별개입니다. 공유 변에서 틈·중복을 막는 래스터라이저 규칙은 래스터화, 수치 오차의 배경은 조건수와 연결됩니다.
꼭짓점 속성 섞기
같은 가중치로 위치뿐 아니라 꼭짓점에 저장한 스칼라·벡터 속성도 보간할 수 있습니다. 이는 삼각형 위에서 그 속성을 아핀 함수로 근사하는 선택입니다.
UV_A=(0,0), UV_B=(1,0), UV_C=(0,1)
λ=(0.5,0.25,0.25)
UV(P)=0.5 UV_A+0.25 UV_B+0.25 UV_C=(0.25,0.25)실제 속성이 비선형으로 변하면 세 꼭짓점만으로 정확한 값을 복원하는 것은 아닙니다. 보간한 법선은 단위 길이가 보존되지 않아 필요한 위치에서 다시 정규화하며, 영벡터에 가까운 결과도 처리해야 합니다. 재질 번호처럼 범주를 나타내는 정수는 가중 평균의 대상이 아닙니다.
화면 가중치와 원근 보정
원근 나누기 후 화면 삼각형에서 구한 λ는 원래 공간의 가중치와 다릅니다. 꼭짓점의 클립 좌표 wᵢ와 화면 가중치를 함께 사용하면 원근에 맞는 속성 보간이 됩니다. 이 식은 클리핑을 마친 유효한 삼각형에서 wᵢ가 0이 아니고 분모도 0이 아닌 경우입니다.
화면 가중치 λᵢ로 보간할 속성 a:
a(P) = (Σ λᵢ aᵢ/wᵢ) / (Σ λᵢ/wᵢ)
λ=(1/2,1/4,1/4), w=(1,2,4), a=(0,1,0)
분자=1/8, 분모=1/2+1/8+1/16=11/16
a(P)=2/11
화면에서 단순 보간하면 Σλᵢaᵢ=1/4로 다른 결과모든 w가 같으면 공통 인자가 약분되어 단순한 아핀 보간과 같아집니다. 이미 원래 삼각형의 가중치를 알고 있다면 같은 원근 보정을 다시 적용하지 않습니다.
GLSL의 smooth는 원근 보정, noperspective는 화면에서의 선형 보간, flat은 보간하지 않는 값을 선택합니다. 셰이더에서는 해당 한정자의 결과를 다시 수동 보정하지 않도록 합니다. 선언 위치와 정수 입력 규칙은 OpenGL 셰이더 인터페이스, 계수 합의 의미는 아핀 결합에 있습니다.
참고 링크
3 sources