그래서 C++로 작성된 오래된 광선 추적 프로그램을 다시 작성하고 C#에서 XNA 프레임 워크를 활용하기로 결정했습니다.XNA를 사용한 광선 추적에 대한 World View 투영 매트릭스 질문에 혼동이 있음
나는 아직도 나의 오래된 책을 가지고 있고 노트를 따라갈 수있다. 그러나 나는 약간의 아이디어와 관련하여 혼란 스럽다. 그리고 누군가가 그것을 멋지게 표현할 수 있는지 궁금해하고 있었다. 위의 코드 U '및 v'에서
for each x pixel do
for each y pixel do
//Generate Ray
//1 - Calculate world coordinates of current pixel
//1.1 Calculate Normalized Device coordinates for current pixel 1- to -1 (u, v)
u = (2*x/ WIDTH) - 1 ;
v = (2*y/HEIGHT) - 1 ;
Vector3 rayDirection = -1*focalLength + u'*u + v'*v
내가 책을 따라 그에게 방법을 할 경우
(I는 같은 이름이 혼동하게 알고) 지정된 카메라에 대해 계산 된 orthnormal의 기초가된다 표현, 그것은 작동합니다. 그러나 XNA를 활용하고 동일한 작업을 수행하는 방법에 혼란 스럽지만 매트릭스를 사용하려고합니다.
그래서 나는이 방향 벡터를 얻기 위해 적용하기로하고있는 XNA 코드 그것은이 시점에서의
class Camera
{
public Camera(float width, float height)
{
AspectRatio = width/height;
FOV = Math.PI/2.0f;
NearPlane = 1.0f;
FarPlane = 100.0f;
ViewMatrix = Matrix.CreateLookAt(Position, Direction,this.Up);
ProjectionMatrix=Matrix.CreatePerspectiveFieldOfView(FOV,
AspectRatio,NearPlane,FarPlane);
}
}
내가 작업의 순서로 혼란 스러워요과 함께 다음 단계를 대체하려고했습니다 어떤 픽셀 (x, y)에 대해서? 내 머리 내가 생각하고 있어요에서
: 는 (u는, V) = ProjectionMatrix * ViewMatrix * ModelToWorld * 정점은
(모델 공간에서) 그러므로 감각을 만들 것 그 세계 공간에서
정점 (
또한 정사각형이기 때문에 뷰 매트릭스가 전조 될 수있는 방법에 대해서도 기억하고 있습니다.
에서 카메라를 기준으로 좌표 넣어. 예를 들면 다음과 같습니다. http://www.scratchapixel.com/lessons/3d-basic-rendering – user18490
이것은 아주 오래된 질문입니다.하지만이 스레드는 여러분이 묻는 것과 똑같은 것을 검색했습니다. @FreaknBigPanda의 답은 실제로 대답이 아닙니다. 기본적인 질문은 광선 추적기 (카메라 위치, 방향, 초점 거리 등)에 대한 매개 변수가 주어지면 변환 및 투영 행렬을 어떻게 구합니까? 이는 외부에서 수행되는 작업을 레이 트레이서의 출력과 결합해야 할 때 특히 유용합니다. 대답을 알아 냈어? – TSGM