Screen space의 Mouse position을 사용하여 Client 공간에 Rendering되어있는 3D Object를 선택하거나 교점을 찾는 것
선택
Object 자체를 선택
교점
Object와 cross된 정확한 위치 반환
좌표계 일치
Object는 Local->World->View->Projection->Screen 순서로 정점이 변환되는데 이 때 Mouse의 Ray와 Object의 좌표계가 일치해야 한다
일반적으로 가장 큰 데이터를 차지하는 Map vertex정보가 World를 기준으로 배치되어있으므로 Mouse의 Ray를 World로 변환하는 것이 좋음
Viewport Matrix
Projection Space에서 Screen 좌표로 변환하기 위해서는 Viewport Matrix를 사용
Width, Height = Viewport 세로 크기
X, Y = 뷰 포트 시작 위치
이 때, 일반적으로 X, Y의 값을 0으로 지정(Viewport와 Client의 크기가 동일한 경우)하므로 Viewport Matrix의 역행렬은 더 간단하게 구해질 수 있음
이 때 Projection Matrix는 다음과 같고
오른쪽 식은 Viewport의 Width, Height 사용
Projection Matrix의 a11, a22만 정점에 영향을 미치므로 View Space Ray Direction은 다음으로 간단하게 치환할 수 있음 Vx=(Width2∗Screenx−1)∗W1 Vy=(Height−2∗Screeny−1)∗H1 Vz=1 그런데 Width=W, Height=H아닌가? 작업중
이제 View Space를 World Space로 변환해야 함
D3D에서는 동차변환을 위해 D3DXVec3TransformCoord와 D3DXVec3TransformNormal을 지원하는데 Coord의 경우 w = 1로, Normal의 경우 w = 0으로 설정한다
교점 계산
외적 사용법
교점 계산
평면 법선 벡터 N과 평면위의 한 점 V, Ray의 시작과 끝점인 Vo,Ve를 내적을 통해 길이 A, t를 구하면 그 비율 r을 구할 수 있음
교점 판정
V0,V1,V2,VInter를 동일한 edge순서(E01⋅EV0I,E12⋅EV1I,E21⋅EV2I)로 각각 외적을 취할때, 만약 VInter가 V0,V1,V2안에 있다면 모두 동일한 방향으로 외적이 생성될 것이다
즉, 이 때 생성된 N⋅F의 값이 동일(양수 또는 음수)라면 정점은 삼각형 내부에 포함된다