顯示具有 book 標籤的文章。 顯示所有文章
顯示具有 book 標籤的文章。 顯示所有文章

2009年6月4日 星期四

Shading Language Prework - 3D Math



OpenGL 是個人在大二時接觸的, 當時也沒有特別深入
大概是瞭解OpenGL提供的座標系統, 會貼圖和使用 Display List 的程度
由於一直停留在 OpenGL 1.2 以前的印象
在剛看到OpenGL (ES) 2.x 時, 個人還深深懷疑是否真的學過OpenGL

在接觸到OpenGL ES 2.0
並且開始瞭解這幾年的GLSL到 ESSL之後
對於 OpenGL SuperBible 中的描述:
"This isn't your father's OpenGL" 不禁莞爾一笑
事隔十多年, 對於CS後進而言, 這真的不是上一輩的OpenGL

延續OpenGL ES 2.0: Hello Triangle!文章
即便有了相關的Emulator, 若非已經在Desktop上熟悉於撰寫OpenGL Shading Language
在撰寫OpenGL ES 2.0程式上應該會感到不得其門而入
這是由於 OpenGL ES 2.0 是精簡自OpenGL 2.0
已經不若 ES 1.x 採用 fixed function的方式

在OpenGL ES 1.x 中採用的 Graphics pipeline 示意圖如下

其中每個部份OpenGL 都有提供對應的 API
像是Transforming部份的 glTranslate, glRotate, glPushMatrix 和 glPopMatrix 等
如此規劃的缺點是, 所產生的效果受限於 OpenGL (ES) 1.x 內所採用對於顏色和光線的演算法
在產生的效果上受限, 對於新的演算法上實作的複雜度高和效率上的低落

然而OpenGL (ES) 1.x 也不是全然沒有好處
相較於駕馭OpenGL (ES) 2.x shading language高門檻
只要對於Coordinate和Camera View 有點瞭解, 知道所需使用的 OpenGL (ES) 1.x API
一般人無需瞭解複雜的數理運算, 就可以寫出不錯的 3D 程式

在OpenGL ES 2.0中 pipeline 如下

其中可以看出原本的 Transformation & Lighting 由 Vertex Shader 處理
在Rasterization 後的Texture, Color, Fog, Alpha都由 Fragment Shader 處理
而shader 的實作就是靠 shading language 針對此兩部份撰寫兩個程式
由於programmable 的緣故 Vertex/Fragment Shader 能提供的能力與彈性超過於上述的項目

而由於上述以shading language處理的部份功能上被取代,
在制定的 API 上相較於 ES 1.1 顯得精簡
而這些彈性與強大的功能所需付出的代價是:
由於shading language 必須直接處理幾何/光學/著色效果.
必須對於 3D 背後的數理運算有相當的認識.



在3D數理上, 其實並沒有一般人懼怕的高深,
只複習一小部份的Linear Algebra與簡單的向量/幾何運算
即可以理解與掌握絕大部分的3D 計算
想好好複習一下可以看看"3D Math Primer for Graphics and Game Development"
(對於 Shading Language 也用不到裡面全部的內容)
可惜的是, 本書運算式上以 left-handed coordinate/row vector 為主
對於OpenGL 採用的 right-handed coordinate/column vector需要稍微對應轉換一下
然而這對於概念與數理的瞭解上並不構成太多問題.

2009年3月10日 星期二

OpenGL ES 2.0 Programming Guide




上次個人寫OpenGL程式, 已是碩士班時期的事情了
那時還停留在OpenGL 1.x, 因此對於2.x可說是知悉甚微....

由於beagleboard所用的OMAP3530的緣故
(OMAP 3530 使用 PowerVR 的3D Accelerator)
個人開始注意到OpenGL ES 2.0
與OpenGL ES 1.x 源自OpenGL 1.5不同
OpenGL ES 2.0 源自於OpenGL 2.0
而上圖的OpenGL ES 2.0 Programming Guide,
可以說是目前唯一的參考書目了


而稍微看了一下簡介
OpenGL (ES) 2.x相對1.x強調programmable pipeline以及shading language
一些範例也相當有趣, 而OpenGL 與 OpenGL ES間的相容性是相當不錯的
以OpenGL ES 2.0作為另一個起點, 似乎是不錯的選擇

苦無OpenGL ES 2.0的硬體練習嗎?
沒關係PowerVR貼心地提供了PC Emulation SDK(Linux/Windows Platform)
let's OpenGL~

2009年2月11日 星期三

File System Forensic Analysis




目前個人正嘗試修改Prex上的FAT 12/16實做, 以便支援FAT 32. 過程中, 很令我很訝異的, 儘管FAT廣為人知,良好解釋FAT的文件卻付之闕如. 雖然, FAT 相關實做已經非常的多, 網路上相關的訊息卻非常零散且難以消化, 缺乏有系統和概念性的完整資訊.

File System在各種實際應用系統中, 都扮演著舉足輕重的角色. 從系統效能, 到基本的資料保存, 都與File System 息息相關. 然而很可惜的, 對於File System而言, 許多人的印象似乎只是附屬的存在, 常常容易被忽略.

那麼非得下去好好trace code才能獲得相關知識? 對於File System有興趣研究的人該怎麼下手?對此File System Forensic Analysis是關於FS相當不錯的參考書目, 該書除了提供目前主流各式File System的說明外, 也提供了相關的基本知識, 在章節的規劃與內文的易讀性, 都相當不錯. 目前市面上專注於此方面的書並不多, 而部份甚至已經顯得過時. 對FS有興趣者, 相當建議購買一本來閱讀.儘管許多進階的檔案系統(ex: ext4, xfs, zfs) 沒有納入介紹, 然而書的內容對於瞭解這些FS的設計與規劃也有相當的助益.

在 ARM 平台上使用 Function Multi-Versioning (FMV) - 以使用 Android NDK 為例

Function Multi-Versioning (FMV) 過往的 CPU 發展歷程中, x86 平台由於因應各種應用需求的提出, 而陸陸續續加入了不同的指令集, 此外也可能因為針對市場做等級區隔, 支援的數量與種類也不等. 在 Linux 平台上這些 CPU 資訊可以透過...