Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android camera獲取matrix作用於canvas的研究

android camera獲取matrix作用於canvas的研究

編輯:關於Android編程

網上查了一下相關的文章,認為自己看懂了,但是實際測試時和網上說的並不一樣(後來研究發現,那個人寫的是錯的!!!),所以,在此提醒大家,要勇於質疑,勇於提出問題。

首先說明camera類,這個類位於package android.graphics 包下,用於圖像3D變換,通過旋轉、偏移等方式,最終通過getMatrix(Matrix)方法拿到矩陣,作用於canvas,使得畫面呈現出立體效果。

camera的源碼沒什麼看的,這裡列舉他的主要方法:

    public native void save();
    public native void restore();
    public native void translate(float x, float y, float z);
    public native void rotateX(float deg);
    public native void rotateY(float deg);
    public native void rotateZ(float deg);
    public native void rotate(float x, float y, float z);
    public native float getLocationX();
    public native float getLocationY();
    public native float getLocationZ();
    public native void setLocation(float x, float y, float z);
    public void getMatrix(Matrix matrix) {
        nativeGetMatrix(matrix.native_instance);
    }
    public void applyToCanvas(Canvas canvas) {
        nativeApplyToCanvas(canvas.mNativeCanvas);
    }
    public native float dotWithNormal(float dx, float dy, float dz);

這些方法看起來都不難,通過字面意思可以大致進行了解,其中最後幾個方法目前還未研究,後面研究了補上。


接著我們來看看Camera變換的幾個軸坐標,圖有點難看哈。

\

這個才是正確的x, y ,z 軸坐標,而另外一個文章說的左手坐標系,經過我的驗證那個作者寫的是錯誤的。

<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Y2FtZXJhzrvT2tf4seq140+146OoMCwwLDCjqaOs0rK+zcrHzbzW0LXE1/PJz73HPC9wPgo8cD5yb3RhdGU8L3A+CjxwPr3T18XO0sPHv7TI57rO0P3XqqOsztLDx7zZyei/ydLU16q2r8281tDX+LHqz7WjrM7Sw8fQ/deq1/ix6s+1o6zIw1jW4dX9t73P8ta4z/LO0sPHo6zSsr7NysfLtdXiyrG68s7Sw8e/tLn9yKVBteO6zU+149bYus/By6OoxNzA7b3iw7Sjv7K7xNzA7b3ixMO49re9v+m2q87316rXxdfUvLq/tKOpoaPIu7rzo6zV4sqxuvLR2NfFy7PKsdXrvfjQ0ND916qjrMi7uvPO0sPHtNPK1rv6xsHEu7e9z/K527Lso6y+zbvht6LP1rHku6/By6GjPC9wPgo8cD7Ex87Sw8fU2b+00ru49sD919OjumNhbWVyYS5yb3RhdGVZKDQ1KTwvcD4KPHA+y/vS4su8ysfIxnnW4cuzyrHV69D916o0NbbIoaPI57n7zu/M5dbQvOTP37rNedbh1ti6z6Os1f3IxnnW4cuzyrHV69D916o0NbbIvs3Kx9a4zu/M5dPSsOuyv7fWz/LA77et16qjrNfzsOuyv7fWz/LN4ret16qjuzwvcD4KPHA+Y2FtZXJhLnJvdGF0ZVgoNDUptcTS4su8ysfIxnjW4cuzyrHV69D916o0NbbIoaO+2cD9wLTLtaOsyOe5+87vzOXW0Lzkz9+6zXjW4dbYus+1xLuwo6zIxnjW4cuzyrHV69D916o0NbbIvs3Kx9a4zu/M5cnPsOuyv7fWz/LA77et16qjrM/CsOuyv7fWz/LN4ret16qjuzwvcD4KPHA+Y2FtZXJhLnRyYW5zbGF0ZSg0MCwgMzAsIDMwKbXE0uLLvKOs1NrNvNbQv7S+zcrHsNG527Lszu/M5dPS0sY0MKOsz8LSxjMwo6zP8nrW4dX9t73P8tLGMjCjqLy0yMPO78zl1LbA68bBxLujrLy0zu/M5b2ru+Gx5NCho6mjuzxicj4KPC9wPgo8cD48YnI+CjwvcD4KPHA+ztLDx7+0vLi49s28wLS808nuwO294qO6PC9wPgo8cD7K18/I1K3NvKO6PC9wPgo8cD48aW1nIHNyYz0="/uploadfile/Collfiles/20150117/20150117092512162.png" alt="\">

進行變換:camera.rotateX(60);

\

進行變換: camera.rotateY(60);

\

進行變換:camera.rotateZ(-60); (這裡是-60哈)


translate和canvas的偏移類似,這裡不再上圖示意。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved