문제

나는 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 좌표를 얻으려면이 라인을 그 세계에 숨어있을 수있는 모든 객체와 교차해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top