2
我有一個Canvas
和Bitmap
。我必須在畫布上繪製位圖的兩倍和旋轉them.This是我的代碼:使用「黑客帝國」旋轉兩個「位圖」
Bitmap bitmap = ... ;
Matrix matrix = new Matrix();
Camera camera = new Camera();
camera.save();
// First drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(0, 0);
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);
camera.restore();
// Second drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(10, 10 + bitmap.getHeight());
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);
旋轉之前結果:
位圖時僅旋轉X軸,所有的東西都fine.In這種情況下,結果是這樣的:
在上述兩種圖像,你可以看到,所有的邊緣都parallel
。但當位圖旋轉軸線Y,邊緣將不平行(頂部位圖的底部邊越過底部位圖的頂邊):
我做錯了什麼?
謝謝你的回覆。看起來合乎邏輯,而且我猜想,但它有一個挑戰:當我在(0,0)中繪製沒有旋轉的位圖時,然後將Camera轉換爲(0,0,0),然後旋轉它並用(0,0)中的新矩陣再次繪製位圖,在3D世界中,我們期望旋轉位圖的頂部完全被頂部的不旋轉位圖覆蓋,但結果不是。看起來,即使您翻譯相機到(0,y0,0)並旋轉Y軸,然後在原點(x0,y0)的畫布上繪製一個圓,將在原點(x1,y1)繪製y1 <> y0而不是y1 = y0的圓。 – hasanghaforian
看起來像你期待3D變換行爲像2D,而他們不這樣做。如果這就是你想要的,拋開你正在使用的3D界面,並使用提供2D變換的3D界面。 – eh9
你的回答是真實的,但我不明白你最新評論的邏輯。所以我在這裏問另一個問題。請看這個問題:http://stackoverflow.com/q/13438032/1043882 – hasanghaforian