2012-03-31 3 views
1

내가하려고하는 구체적인 이름은 "unproject"= 화면 점을 3D 세계에 매핑하는 것입니다.화면상의 점을 3D로 매핑 실제 위치

그래서 나는 3D는 2D 화면 좌표 매핑에 대한 간단한 방정식이이 사이트를 발견 :

http://www.petesqbsite.com/sections/tutorials/tuts/perspective.html

나는 광범위하게 이러한 방정식을 사용했지만, 지금은 상호 작용 할 수 있도록하려면 화면 위로 마우스를 가져 가면 3D 세계.

2D 좌표를 3D 객체에 연결하는 대신 화면상의 점을 실제와 매핑하는 방정식을 찾고 싶습니다. 나는 답을 찾기 위해 다음의 2 가지 방정식을 리버스 엔지니어링하려고 시도했다 :

screenPoint.x = (int) ((eye.z * (realPoint.x-eye.x))/(eye.z + realPoint.z) + eye.x); 
screenPoint.y = 480 - (int) ((eye.z * (realPoint.y-eye.y))/(eye.z + realPoint.z) + eye.y); 

그러나 나는 수학적으로 불가능했다.

도움이 될 것입니다.

감사합니다.

+0

일반적인 경우 (투영이 반전되지 않음) 불가능합니다. 그러나 간단한 경우 광선 추적 (ray tracing)을 사용하여 주어진 픽셀에 어떤 물체가 투영되는지 확인할 수 있습니다. 또는 2D 이미지를 생성 할 때 미리 정보를 생성 할 수 있습니다. –

+0

그래서 광선 추적을하면 다음과 같이 나타납니다. - 카메라 좌표 - 화면 평면의 등식 - 3D 평면에서 일부 평면 (xz) 평면의 등식 화면에서 평면까지의 점을 3D 세계? 나는 xz 평면 위에 마우스를 가져 가면 점이 xz 평면에 표시되도록하려고합니다. – user1170679

+0

내 질문에 대한 답변을 찾았습니다. http://stackoverflow.com/questions/9971701/unprojecting-2d-screen-coordinates-to-3d-coordinates – user1170679

답변

0

한때 비슷한 문제가있었습니다. 내가 한 것은 OpenGL에서 사용되는 시야를 발견하고 화면상의 1 픽셀 = 1 단위의 OpenGL에서 Z 거리를 계산 한 것입니다. 이제는 화면의 아무 곳이나 가리키면 화면상의 마우스의 X 및 Y 좌표와 이전에 FOV를 기반으로 계산 한 Z 좌표가 있습니다. 이제는 명확한 3 차원 좌표를 갖게되었습니다. 그런 다음 카메라에서 가상 점을 그 점으로 "그린"후 그것이 무엇을 치는지 봅니다. 나는 이것이 단순한 대답이 아니라는 것을 알고 있지만, 당신이 요구하는 것은 불가능합니다. 일부 속임수로이를 수행하는 방법이 있습니다