Stage3D AGAL中的頂點變換運算解析

2021-06-01 21:33:51 字數 1044 閱讀 5098

我們在stage3d的底層api編寫中,會經常遇到要處理以下情形:vertex頂點在3d空間中的變換。這個行為會根據render機制的不斷重新整理而形成3d物體在空間中整體座標變換。

在編寫stage3d的應用中,最基礎常見的agal opcode是這樣:

m44 op,va0,vc0

這個簡單的opcode構成了暫存器中的vertex座標的動態變換。那麼接下來,就給出從頭至尾的原理分析。

首先,我們先要了解stage3d api基本原理之外的矩陣乘法,如果你求學時代已經學過大量的矩陣計算理論,那麼你應該慶幸你當初學習的這部分知識並不是沒用的花瓶,現在終於有了用武之地。

矩陣乘法的基本理論是:乙個mxn的矩陣a能夠與乙個nxr的矩陣b相乘,結果是乙個mxr的矩陣。例如,乙個4x2矩陣和乙個2x3的矩陣相乘,結果是乙個4x3的矩陣c,c中的任意元素c[ij]就是a的第i行向量與b中的第j列向量的點乘結果。那麼矩陣相乘的核心是:矩陣a的列,必須和矩陣b的行數量匹配,否則矩陣乘法無意義。如果用圖來表示,如下圖:

在stage3d中,每乙個vertex頂點可以看做是乙個1x3的矩陣[x,y,z],但是在3d環境中由於有齊次座標w的存在,所以,我們經常將某個vertex的座標真正定義為1x4矩陣[x,y,z,w],如果w=1,表示將3d空間內的點都投影到w=1的4d平面上,齊次座標公式是[x/w,y/w,z/w],由於w=1,所以自然也就成為我們平常所理解的[x,y,z]。而w=0的意義,則表示4d空間無窮遠的點,自然也就成為了方向上的描述,所以在stage3d中的矩陣乘法,w座標的0,就是頂點平移轉換的開關。如果這裡實在太難理解了,建議各位去wiki上仔細閱讀一些基礎3d理論。所以,頂點變換的矩陣乘法是這樣圖示(縮放,旋轉和平移可以自由設定4x4 matrix3d矩陣中的行列值來獲得):

談到這裡,就不難理解stage3d頂點位置變換了。下面把基礎理論,agal opcode和stage3d api揉在一起,看看乙個基本的頂點變化操作,在stage3d裡怎麼搞定的。as**:

stage3d_********.zip

希望這篇文章對於stage3d基礎計算理論還不清楚的朋友有所幫助。enjoy it!

Spark中stage的劃分

如下為spark中劃分stage的原始碼 dagscheduler將job分解成具有前後依賴關係的多個stage dagscheduler是根據shuffledependency劃分stage的 stage分為shufflemapstage和resultstage 乙個job中包含乙個results...

AS3 使用stage出錯的問題

這兩天看as3 cookbook和as3的幫助文件,裡面很多 執行後都會出現 typeerror error 1009 無法訪問空物件引用的屬性或方法。這個錯誤。幾經周折,才知道解決辦法 使用addeventlistener event.added to stage,enterdlhandle 把要...

Spark中劃分stage的規則

常見的有map,flatmap,filter,sample 常見的有sortbykey,reducebykey,groupbykey,join 在spark中,每個任務對應乙個分割槽,通常不會跨分割槽運算元據。但如果遇到寬依賴的操作,spark必須從所有分割槽讀取資料,並查詢所有鍵的對應值,然後彙總...