日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

AGAL的解释和使用

發布時間:2024/5/24 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 AGAL的解释和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在stage3D這個最底層的flash3D的使用時,真的說實話真的要想看到我們想看到的任何一個模型真的很蛋疼,既要給什么頂點著色器和片段著色器上傳信息,又得上傳什么紋理等等可以參考我的關于stage3D的第一篇日志:第一個關于stage3D的HelloWorld,是不很奇葩呀,反正很頭疼的!

這篇日志就真正說說那個著色其中的AGAL的使用,看上去就他媽的是什么匯編語言與寄存器打交道。下來就來打開這個蛋疼的AGAL吧。

在百度百科中對AGAL的定義是這樣的:

AGAL(Adobe Graphics Assembly Language)是Adobe開發的圖形匯編語言,匯編語言是僅高于計算機二進制機器碼的低級語言,可以精確地操控機器硬件比如可編程顯卡,PC的Dirext9、MAC的OpenGL以及移動設備中的OpenGL ES 2都是可編程顯卡,并且都支持AGAL。通過Adobe官方提供的編譯器AGALMiniAssembler(實際上是一個AS類庫),我們可以通過字符串指令來獲得一個AGAL二進制流,再通過context3D上傳給顯卡的編程管線。對于頂點以及片段的運算都是通過AGAL交由顯卡來處理的,這就是GPU硬件加速。

AGAL的使用:

基本語法:

<操作碼> <目標寄存器> <源寄存器1> ... <源寄存器2>

2. AGAL中的可用寄存器:

目標寄存器op、oc:分別針對頂點寄存器和片段寄存器的輸出信息; 臨時寄存器vt、ft:分別是暫存頂點信息和片段信息的,也就相當于我們經常使用的臨時變量; 特殊寄存器va、fs:分別針對于頂點寄存器和片段寄存器有不同的意義,va是真正存放頂點信息屬性的寄存器,fs真正存放紋理信息的寄存器; 常量寄存器vc、fc:分別是針對頂點寄存器和片段寄存器:vc是主要保存位置變化等常量、fc主要保存顏色數據等常量,其實往往我們也就只存放顏色信息; V寄存器:用于頂點寄存器與片段寄存器之間的交互。

3. 每種寄存器都有自己的數量,總的可用寄存器為198個,每個寄存器有4位

op、oc:只有一個 不存在 op1 op2...oc0 用法 ; v、vt、va、ft、fs:有8個 vt0~vt7 fs0~fs7; vc 有128個:vc0~vc127 ; fc 有28個:fc0~fc27;

4. 寄存器的傳值:寄存器俺按傳值分類可以分為兩類:不允許傳值和允許傳值的。

不允許傳值的有op、oc、vt、ft、v四個寄存器。因為op、oc是用于輸出的,只能在寄存器作為輸出結果;vt、ft為臨時的也只能在寄存器內部使用;v只是將頂點的信息方便的傳遞給片段寄存器,不允許傳入值。 允許傳值的

特殊寄存器:va傳入頂點的屬性,方式是:context3D.setVertexBufferAt(2,....);將信息傳給頂點特殊寄存器va2;

fs傳入紋理信息,方式是:context3D.setTextureAt(1,.....) 將紋理信息傳給片段特殊寄存器fs1

常量寄存器vc、fc:有三種方式:context3D.setProgramConstantsFromByteArray()

context3D.setProgramConstantsFromMatrix()

context3D.setProgramConstantsFromVector()

這3個的方法的第一個參數均為type,表示這個常量是傳給所有的頂點著色器呢還是所有的片段著色器 Context3DProgramType.VERTEX 頂

點Context3DProgramType.FRAGMENT 片段。

5.常用的操作碼:

mov 賦值 mov v0,va1 把va1的值賦給v0 add 加法 add op va1,va2 sub 減法 mul乘法 div 除法 tex材質 更多的操作碼的使用可以參照百度百科對AGAL操作碼,一半的我們用這幾個就其實已經夠了。

一個關于AGAL使用的代碼如下:

/**創建一個簡單的著色器*/
private function initShader():void{
    //創建頂點著色器
    var vertaxShader:AGALMiniAssembler = new AGALMiniAssembler();
    vertaxShader.assemble(Context3DProgramType.VERTEX,
        "m44 op,va0,vc0
"+ //讓第0個va寄存器和第0個vc寄存器進行m44運算(4*4矩陣乘法)
        "mov v0,va1
"    //把uv交給va1
    );
    //頂點著色器,每個頂點都會執行一次,也就是說,在每次執行時,va0就是當前正在處理的這個頂點的位置
    //創建片段著色器
    var fragmentShader:AGALMiniAssembler = new AGALMiniAssembler();
    fragmentShader.assemble(Context3DProgramType.FRAGMENT,
        "tex oc,v0,fs0<2d,miplinear,repeat>
"http://把紋理交給fs0 結合 uv信息v1 進行采樣運算 tex,獲得最終顏色
    );
        //片段著色器,每個像素點都執行一次
    //合并為一個著色器提交給顯卡
    shaderProgram = context3D.createProgram();
    shaderProgram.upload(vertaxShader.agalcode,fragmentShader.agalcode);
}

至此,比本上就已經了解了AGAL的使用了,下來要很炫的效果就看自己對這些操作碼的使用!

總結

以上是生活随笔為你收集整理的AGAL的解释和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 日韩美女国产精品 | 精品欧美一区二区三区久久久 | 爱搞国产| 一本色道久久综合亚洲二区三区 | 日本a在线观看 | 久久丝袜视频 | 麻豆欧美| 特黄做受又粗又大又硬老头 | 国产在线成人精品午夜 | av片免费在线播放 | 大地资源二中文在线影视观看 | 91tv在线观看 | 亚洲色欲色欲www | 青青草国产 | 动漫精品一区一码二码三码四码 | 成人网av | 国产精品久久久久久久久久辛辛 | 国产二区三区视频 | 中文字幕av亚洲精品一部二部 | 香蕉影院在线观看 | 久久综合伊人77777蜜臀 | 91视频专区 | 一二三区av| 亚洲影院一区二区三区 | 国产精品久久久久久亚洲影视 | 欧美乱强伦 | 精品国产乱码久久久久久1区二区 | 丝袜熟女一区二区 | 性欧美大战久久久久久久久 | 久久久久久久久久久91 | 久久久久久网站 | 免费精品一区二区 | 日本熟妇一区二区三区四区 | 在线观看中文字幕av | 精品乱子一区二区三区 | 日韩视频一区二区三区四区 | 一级黄色大片免费看 | 国产乱妇4p交换乱免费视频 | 午夜激情电影在线观看 | 少妇不卡视频 | 在线电影一区二区 | 亚洲天堂影院在线观看 | 亚洲影视精品 | japanese强行粗暴 | 国产日产精品一区二区三区四区 | 美女视频三区 | www.香蕉视频在线观看 | 亚洲自拍偷拍网站 | 你懂的国产| 中文字幕免费高清视频 | 久久亚洲色图 | av中文字幕在线播放 | 精品久久无码中文字幕 | 成人福利视频导航 | 少妇喷白浆 | 国产主播一区二区 | 国产精品天美传媒入口 | 成人国产片女人爽到高潮 | 久久久久久97 | 成人精品一区二区三区四区 | 人妻熟女一区二区aⅴ水野 91在线观看视频 | 午夜综合网 | 国产午夜精品在线 | 青春草视频在线免费观看 | 亚洲免费大片 | 在线日韩 | 国产4区| 日日色综合 | 亚洲高清免费 | 亚洲天堂一区二区在线 | 男人天堂b | 精品亚洲永久免费精品 | 精品动漫av | 久久久久久久九九九九 | 波多野结衣在线播放视频 | 麻豆亚洲av熟女国产一区二 | 国产超级av| 天天射天天干天天操 | 永久免费av网站 | 日韩欧美一区二区三区四区五区 | 2022国产精品 | 国产色视频在线 | 欧美三日本三级少妇三 | 开心激情播播网 | 又黄又爽的视频 | 欧美大片在线播放 | 麻豆一区产品精品蜜桃的特点 | av福利在线免费观看 | 成人精品免费看 | 亚洲AV无码成人片在线观看 | 久久嫩草视频 | 久久性片| 欧美射图 | 电影寂寞少女免费观看 | 黄色片网站免费看 | 女生被男生c | 一区在线视频 | 91免费精品视频 |