Graphics Programming

Stage3D - 평면에 그림자 렌더링하기 본문

Season 1/플래시

Stage3D - 평면에 그림자 렌더링하기

minseoklee 2012. 2. 21. 23:02

stage3d study - shadow on plane - wonderfl build flash online




A: 공간상의 점
L: 단위 빛 벡터 (무한히 먼 태양에서 오는 빛처럼 방향은 일정하다고 가정)
n: 평면의 법선 벡터
r: 평면이 포함하는 한 점

A에서 L의 방향을 따라 진행했을 때 평면과 교차하는 점, 즉 그림자가 드리우는 지점을 찾는 것이 목표다.

- 그림의 반직선을 A + tL(t는 실수, t ≥ 0)로 나타낸다.
- 평면이 포함하는 임의의 점을 x라 하면 n·x = n·r 이 성립한다. 내적 기호가 안 보임

 xA + tL을 대입하고 t에 대해 정리하면


이 나온다. 손으로 계산하거나 CPU를 쓸 때는 t를 구해서 A + tL에 대입하면 그림자 위치를 구할 수 있지만 GPU를 쓰기 때문에 행렬로 만들어서 정점 셰이더에서 행렬과 정점을 곱해야 한다. 그 행렬을 S라 하면 SA가 그림자의 위치가 되어야 한다.

점의 그림자는 A + tL에 생기므로 t에 위 식을 대입하면


그림자의 위치를 (x, y, z, 1)이라 하고 성분별로 정리한다. A = (A1, A2, A3) 이고 L = (L1, L2, L3) 이며 n = (n1, n2, n3) 이다.


다행히 일차 결합으로 표현할 수 있다. 행렬 하나로 묶는다.


Comments