2012-06-12 4 views
0

나는 이것을 알아낼 수 없습니다. 그래서 카메라는 (0,0,5,0f)에 위치한 (0,0,0)에서 말하는 세계를 조사하고 있습니다. 화면 해상도가 800x600이라고합시다. 자, 세계 중심이 (0,0,0)이므로 카메라에서 볼 수있는 극점 (x 축, 오른쪽 측면)은 무엇입니까?XNA 카메라 장면 크기

카메라가 (0,0,50.0f)에 배치되면 어떤 가치가 있습니까? 기본적으로, 어떻게 이것을 알아낼 수 있습니까?

+-------------------+ 
|   |   | 
|   |   | 
|   |   | 
+---------+---------¤ <-- what's the x-value of this point? 
|   |   | 
|   |   | 
|   |   | 
+-------------------+ 
+1

투시 투영입니까? – Ani

+0

예. 기본적으로, 나는 특정 범위 내에서 그리기 /보기를 시도하고있다. 이러한 일이 일어나기 위해서는 카메라 거리, 장면 크기 등과 같은 변수를 계산해야 할 것입니다.이 질문은 저를 시작하기위한 것입니다. :) – States

+0

귀하의 질문은 "이 점의 x 값은 무엇입니까?"하지만 당신은 알 수 있습니다. 가까운 비행기의 x 값을 의미합니까? 또한 투시 투영법을 사용하는 경우 직각 투영과 같은 직각 투영법을 사용한다는 것을 기억하십시오. 이것을 분명히하고 싶었습니다. – dowhilefor

답변

1

질문을 올바르게 이해하고 있다면 화면 중앙의 지점의 세계 공간 위치를 알고 싶습니까?

실제로 XNA (감사합니다 MS!)에서 수행하기가 매우 쉽습니다. 뷰포트 클래스를 사용하여 화면 공간 위치를 월드 공간으로 "비 프로젝트"할 수 있습니다.

기본적으로 게임에 그려지는 모든 픽셀은 2D 디스플레이에 그려지는 2D 이미지로 변환하기 위해 몇 가지 변환을 거치며 이러한 변환도 거꾸로 실행할 수 있으며 XNA에는이 방법이 있습니다.

Vector3 screenLocation = new Vector3(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height/2, 0); 
Vector3 worldLocation = GraphicsDevice.Viewport.Unproject(screenLocation, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix); 

편집 :

당신이 그릴 수 있도록 카메라 뷰에서 객체가 테스트 할 경계 프러스 텀을 사용할 수 있는지 확인하려는 경우.

BoundingFrustum frustum = new BoundingFrustum(camera.WorldViewProjectionMatrix); 

프러스 텀은 경계 상자 같은 것들이 절두체 내부에있는 경우 테스트하기 위해 꽤 많은 재정을 가지고 교차라는 메서드가 포함되어 있습니다.

+0

미안하다 남자 : 미안 : D – Andy

+0

오, 음 ... 흥미 롭군요! 나는 그것을 할 수있는 방법 중 하나라고 생각합니다. 투영을 거치지 않고도 동일한 결과를 얻을 수 있습니까? – States

+0

실제로 세상을 보는 카메라는 어느 위치 에나 어떤 각도로도 배치 할 수 있습니다. 사용자가 얻으려는 것은 보려는 픽셀과 가장 가까운 공간의 한 점입니다. – Andy