2

キャンバスにビットマップを2回描画して回転させる必要があります.これは私のコードですCanvas:Bitmap

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のみを回転する場合、すべて問題ありません。この場合、結果は次のようになります。

ここに画像の説明を入力

上の両方の画像で、すべてのエッジが であることがわかります。ただし、parallelビットマップが軸 Yを回転すると、エッジは平行になりません (上のビットマップの下端が下のビットマップの上端と交差します)。

ここに画像の説明を入力

私は何か間違ったことをしましたか?

4

1 に答える 1

4

あなたは何も悪いことをしているわけではありません。コードから得られる結果を理解していないだけです。使用しているカメラは 3D カメラで、カメラを 3D 空間で動かした結果が表示されています。カメラを回転させると、一般に平行線は平行のままになりません。y 軸を中心に回転するときにアーティファクトに気づきましたが、x 軸の回転の図にも存在します。x 軸については、左側と右側が平行ではないことに注意してください。左側は右側より垂直に近いです。

Androidcanvasオブジェクトには、スケール、傾斜、平行移動、および回転操作があります。2D 操作が必要な場合は、cameraオブジェクトを完全に捨てることができます。

于 2012-11-17T15:20:16.427 に答える