아이소 메트로 투사 된 세계로의 화면 포인트를 발표하지 않음
-
06-09-2019 - |
문제
나는 2D 아이소 메트릭 엔진에서 세상을 렌더링하면서 커튼 3D 시뮬레이션 뒤에 있습니다. 나는 이전에 아이소 메트릭 엔진을 한 적이 없으며 매트릭스 수학은 일반적으로 녹슬으므로 문제가 있습니다.
프로젝션 매트릭스가 있습니다. 가장 간단한 형태는 다음과 같습니다.
0.7 0.35 0
0 -0.87 0
-0.71 0.35 1
내 엔진 좌표계가 왼쪽 상단에 0,0이고 +x는 오른쪽/동쪽에, 남쪽에는 +z가 있기 때문에 몇 가지 표지판이 뒤집 힙니다.
이제 그 반대는 다음과 같습니다.
1.4080 0.5670 0.0000
0.0000 -1.1490 0.0000
1.0000 0.8050 1.0000
이제이 매트릭스 주로 일하다.
예를 들어
화장실: 500,0,500 = 화면: -1.44, 350, 500 (x와 y는 맞습니다)
화장실: 0,0,500 = 화면: -355, 175, 500 (x와 y는 다시 맞습니다)
그러나 이제 다른 방법으로 가야한다면 더 이상 편리한 z 값이 없으므로
화면: -1.44, 350, 0 = 화장실: -2, -402.97, 0 (따라서 쓰레기)
그리고 더 많은 것 - 더 이상 z 값을 갖지 않으면 화면 코디에서 세계 코디를 검색 할 수 없습니다.
여기서 해결 방법은 무엇입니까?
편집하다
제출하지 못하는 요점은 마우스 따기를위한 광선을 얻는 것임을 지적해야합니다.
내가하고있는 일에 대한 나의 오해 인 것 같습니다.
해결책
당신이 발견 한 바와 같이, 당신의 3D 공간으로의 전환은 어떤 종류의 Z 좌표가 필요합니다.
나는 당신이 역전 변환을 할 것을 제안합니다 두 배. 화면 근처 (관찰자와 가장 가까운) 근처에 z 좌표가 있고 3D 장면 뒷면에 z 좌표가 있으면 한 번. 이 두 가지 3D 포인트는 3D 라인을 제공하며, 이는 2D 포인트의 모든 위치를 차지할 것입니다.
다른 팁
당신은 할 수 없습니다. 정보를 잃는 화면에 투사하고 있습니다.
당신이 그것에 대해 생각한다면, 여러 3D 좌표가 화면의 동일한 지점에 투사되며 화면 좌표를 아는 것만으로도 원래 좌표를 검색하기에 충분하지 않습니다.
편집] 화면 좌표를 살펴보면 모든 Z- 값 0을 제공합니다. 이는 투영 행렬의 마지막 열에 모든 0이 있어야하므로 해당 행렬이 비 지배 할 수 없게됩니다.
화면의 모든 픽셀은 보는 사람의 눈에서 화면 뒤의 가상 3D 세계로 선을 나타냅니다. 3D 좌표를 얻으려면이 라인을 그 세계에 숨어있을 수있는 모든 객체와 교차해야합니다.