Home > Tags > Shader

Shader

完成 Win32上的OpenGL/Cg

星期六日都坐在家中做 OpenGL/Cg 的移植,比想像中遇到更多問題,但終於在三月最後一個晚上完成。這裡做一個簡單的回顧,希望大家遇到類似的問題時可以減少脫髮。

編譯期選擇圖像 API

之前曾經寫過一篇《跨平台的圖像渲染引擎》,提及使用 abstract factory pattern 或 conditional compilation (macro) 來為圖像 API 抽像化。後者的優點是效能較高 (不需使用 virtual function call),但缺點是代碼難看。為了改善後者的缺點,我想到了使用 inheritance 去避免在 class 的定義裡寫 macros。舉一個例子就會明白。

首先,利用 #include 後可以是一個 macro 的功能 (Visual C++ 裡只可以是一個 macro identifier,而 gcc 可以 expand macro),把平台相關的 header 和 implementation 檔放在同一個地方:

Continue reading

實作簡單的材質

進度有點緩慢,今天才完成了 3月6日定下的第一個目標。

使用 blinn_bump_reflect.fx 的渲染

今天的學習進度:

  1. 設定 Matrices 及修正相關函式: 現時設定為 column-major。改正相關函式花了很多時間。
  2. 修改 ChamferBox: 由於 ChamferBox 只負責生成一個 Geometry 物件,所以把 constructor 改為一個 function。原本想嘗試做一個 non-member function,但是 SWIG 部份有問題,花了一兩個小時也找不到解決辦法,所以現在改為一個 static member function。
  3. 實作 Material: 使用 HLSL fx 檔案在建構一個 Material (在 Direct3D9 上而已,之後再考慮跨平台的設計)。利用 FX Composer 的 Blinn.fx 測試渲染。
  4. 加入 Texture: 因為 blinn.fx 需要 diffuse texture,又實作了一個 Texture 類別,和 Material 相似,也是從 constructor 讀入一個影像檔案。
  5. 測試 blinn_bump_reflect.fx: 因為這個 Effect 需要 Tangent 和 Binormal,所以實作了
    void GeometryBuilder::ComputeTangentSpace(int texcoordIndex)

    函式從三角形網格計算這些向量,當中參考了這個網站的實作

  6. 加入 CubeTexture: blinn_bump_reflect.fx 需要環境貼圖,因此加入這個類別。並重構 Texture,使 Texture 和 CubeTexture 繼函自 TextureBase。

Continue reading

Home > Tags > Shader

Search
Feeds
Meta

Return to page top