2014-02-25 5 views
0

OpenGL ES 2.0 iOS 앱에 대한 패닝을 구현 중이며 경우에 따라 z 방향으로 패닝하는 데 어려움을 겪고 있습니다. 초기에 모델이로드되면 y +가 화면의 위쪽을 향하고 x +가 화면의 왼쪽을 가리키고 z +가 화면 밖으로 사용자를 향해옵니다. 패닝은 예상대로 작동합니다. 패닝 "오른쪽"은 양의 x 축을 따라 예상대로 모델을 이동합니다. Y는 마찬가지로 작동합니다. "위로"이동하면 양의 y 축을 따라 모드가 이동합니다 (좌표가 음수로 바뀌어 좌표가 올바르게 동작합니다). 문제는 항상 모델이 회전하여 z + 축이 이제 오른쪽을 가리키고 "오른쪽"을 패닝 할 때 z 축과 항상 같습니다. 음수 인 z 값을 받고 왼쪽으로 패닝하면 양수 값을 얻습니다. z 축과 같이 뒤집 힙니다. z +가 화면의 왼쪽을 가리키면 동일한 논리가 발생합니다. 패닝 왼쪽 값과 음수 값, 오른쪽 패닝 값입니다. 여태까지는 그런대로 잘됐다.회전 매트릭스를 기반으로 한 OpenGL ES 패닝 (X, Y, Z)

z +가 화면 상단을 향하고있을 때 z +를 따라 패닝 할 때 다른 방향이 모두 음수 값을 표시하면 양수 값이 표시됩니다. 아래로 이동하면 음수 값이 표시됩니다. 그래서 z가 왼쪽/오른쪽 일 때 좌표를 뒤집을 필요가 있습니다. 그러나 z를 위/아래로하면 패닝은 거꾸로됩니다. 내가하고있는 일은 팬 제스처에서 터치 위치를 검색하여 z = 0 인 GLKVector3을 만든 다음 현재 모델 뷰 매트릭스를이 벡터에 적용하는 것입니다. 모델 뷰 행렬은 현재 회전을 적용하여 주어진 점에 따라 회전을 기준으로 점을 출력해야합니다 ... 또는 그렇게 생각했습니다. z 방향으로 정확하게 패닝을 처리하기 위해 누락 된 일부 논리가 있습니까?

답변

0

(카메라의 왼쪽 및 위쪽 벡터를 따라) 카메라 공간에서 이동하려면 카메라 방향의 x 배율 및 x 배율을 곱한 축을 사용하십시오.

오브젝트 공간을 변환하려면 벡터에 모델보기 행렬의 역 행렬을 곱하면됩니다. 정확성을 위해 모델 뷰 투영 행렬의 역수를 사용할 수 있지만 0 대신 z = nearPlane을 사용해야합니다.

+0

기본적으로 카메라는 움직이지 않으며 항상 0, 0 및 가까운 평면에 초점을 맞 춥니 다. 나는 그것이 당신이 성취하고자하는 것과 같기 때문에 두 번째 문장을 추가했다고 가정하고 있습니다. 따라서 눈 좌표에서 변환 점을 가져 와서 z = 평면 근처를 사용하고 이것을 역 또는 모델 뷰 행렬 * 투영 행렬로 곱합니다. – kschins

+0

네, 오브젝트 공간에서 변환해야합니다. –

+0

이제 반대 결과가 생성됩니다. z 값이 음수로 이동하고 양수로 이동하기 때문에 맨 위 화면을 가리키는 z +가 올바르게 작동합니다. z +가 화면 오른쪽으로 돌아 가면 z 값은 오른쪽으로 이동하고 음수로 왼쪽으로 이동하므로 한 세트는 여전히 예상대로 반대 방향으로 이동합니다. locationVector = GLKMatrix4MultiplyVector3 (GLKMatrix4Multiply (inverseModelViewMatrix, self.projectionMatrix), locationVector); – kschins