2012-06-17 3 views
2

나는 광선 추적에서 카메라를 완전히 고수했습니다. 제 계산을보고 오류가 어디 있는지 알려주십시오. 왼손잡이 좌표계를 사용하고 있습니다.광선 추적의 카메라

xp = x/S * 2 – 1; 
yp = y/S * 2 – 1; 
:

X, Y // 범위 [0..S) × [0..S는) // 픽셀 지금

을 좌표의 픽셀로 변환하게는 카메라면의 파라 좌표 간의

XP, YP // 범위 [-1..1] × [-1..1] 카메라 근거

계산 :

//eye - camera position 
//up - camera up vector 
//look_at - camera target point 

vec3 w = normalize(look_at-eye); 
vec3 u = cross(up,w); 
vec3 v = cross(w,u); 

때문에 RA (

vec3 dir = look_at – eye + xp*u + yp*v; 

이미지 평면 법선 벡터 w이 있고, 어느 눈과 지점에서 모양 사이 여야합니다 : 실수가 여기 내 생각

vec3 dir = look_at – eye + xp*u + yp*v; 
ray3 ray = {eye, normalize(dir)}; 
+0

나는 그것을 얻지 못한다. 왜 이렇게 많은 계산이 필요한가? 광선이 카메라와 카메라 사이에 보이는 관심 지점 사이에 있지 않습니까? 두 점 사이에 그냥 벡터가 있습니까? –

답변

2

: y 방향은 다음과 좌표를 가져야한다 광선 추적기에서보다 보편적 인 방법), 또는 눈 뒤에있을 수 있습니다 (실제 핀홀 카메라를보다 자세히 모델링합니다). 그럼 스칼라 zoom_factor을 만들어 봅시다. 양수는 비행기를 눈앞에 놓을 것이고, 음수는 비행기를 눈 뒤에두고 (그리고 이미지를 뒤집을 것입니다).

이미지 평면의 중심은 따라서이다 :

eye + zoom_factor*w 

이미지 평면에 점 (xp, yp) 따라서이다 :

eye + zoom_factor*w + xp*u + yp*v 

는 이제 방향이 시점에 눈에서가되고 싶어요

vec3 dir = eye + zoom_factor*w + xp*u + yp*v - eye; 

eye의 그것 때문에 취소 :이 이미지면에 이 xpyp는 (-0.5, 0.5)과 같은 범위에서 각각 가정

vec3 dir = zoom_factor*w + xp*u + yp*v 

님 단순화한다. (0, 0)은 이러한 배열을 갖는 이미지면의 중심이다.

+0

감사합니다. 결정된. – innochenti