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

來源:互聯網
上載者:User

標籤:android   圖片   matrix   

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

首先說明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 軸座標,而另外一個文章說的左手座標系,經過我的驗證那個作者寫的是錯誤的。

camera位於座標點O點(0,0,0),也就是圖中的左上方

rotate

接著我們看如何旋轉,我們假設可以轉動圖中座標系,我們旋轉座標系,讓X軸正方向指向我們,也就是說這時候我們看過去A點和O點重合了(能理解嗎?不能理解拿個方塊東西轉著自己看)。然後,這時候沿著順時針進行旋轉,然後我們從手機螢幕方向觀察,就會發現變化了。

那我們再看一個例子:camera.rotateY(45)

他意思是繞y軸順時針旋轉45度。如果物體中間線和y軸重合,正繞y軸順時針旋轉45度就是指物體右半部分向裡翻轉,左半部分向外翻轉;

camera.rotateX(45)的意思是繞x軸順時針旋轉45度。舉例來說,如果物體中間線和x軸重合的話,繞x軸順時針旋轉45度就是指物體上半部分向裡翻轉,下半部分向外翻轉;

camera.translate(40, 30, 30)的意思,在圖中看就是把觀察物體右移40,下移30,向z軸正方向移20(即讓物體遠離螢幕,即物體將會變小);


我們看幾個圖來加深理解:

首先原圖:


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


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


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


translate和canvas的位移類似,這裡不再示意。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.