我想掐特定各地變焦協調瓷磚15F X 15F 3D板。即我不想放大原點。因此我需要相應地平移該板。捏縮放和平移,以特定的屏幕座標
我使用的是PerspectiveCamera
(近= 0.1F,遠遠= 100F)。對於畫面的完美契合相機位於approx.z=13.4
縮放前。
現在是什麼(我覺得)我想要做的是:
Unproject每個雙指縮放做一次屏幕座標(GestureDetector.pinch
法):
float icx = (initialPointer1.x + initialPointer2.x)/2;
float icy = (initialPointer1.y + initialPointer2.y)/2;
pointToMaintain = new Vector3(icx, icy, 0f);
mCamera.unproject(pointToMaintain);
現在對於每個縮放週期(如我據此調整mCamera.z
做mCamera.update()
)一期項目點返回到畫面座標:
Vector3 pointNewPos = new Vector3(pointToMaintain);
mCamera.project(pointNewPos);
然後計算增量和平移相應:
int dX = (int) (pointNewPos.x - icx);
int dY = (int) (pointNewPos.y - icy);
pan(...); /* I.e. mCamera.translate(...) */
我的問題是,mCamera.z最初以上pointToMaintain.z然後低於當用戶移動手指:
cam.z ptm.z dX dY
0 13.40
1 13.32 13.30 12 134
2 13.24 13.30 12 -188
...
(0)是原始在縮放開始之前,mCamera.z的值。 (1)無效?但是(2)應該沒問題。
我的問題是:
(1)我怎樣才能得到一個「有效」 pointToMaintain
unprojecting屏幕座標時相機上。即一個點,不低於cam.z
。 (我得到13.30點的原因是(我猜),因爲near = 0.1f。但是如上所示,這導致(奇怪的?)屏幕座標)。
(2)這是一個很好的戰略移動瓷磚板更接近用戶捏的放大座標?
thisZoom最初不爲0吧?你將它設置爲camera.z的值? – Henrik
thisZoom從1開始 –