2010年5月27日 星期四

Ogre3D 與 wxWidgets

Ogre3D 與 wxWidgets 連結的基本元件已處理完畢, 接下來就是要正式開始製作工具的內容, 會先從地圖編輯器開始.

所謂工欲善其事必先利其器, 因此工具 UI 的 Layout 顯得格外的重要, 這部份可能要花一點時間來構思, 目前正在下載 UDK 當做參考, 雖然說是不可能寫成像它那樣, 不過拿來參考看看它的 Layout 及其它的功能應該還算不錯, 也順便想想是不是有哪些東西當初有漏掉了, 或是換另一個方法來做或許會更好.

2010年5月19日 星期三

wxWidgets 基本元件

 wxWidgets 基本元件還在進行中, 因為有太多的雜事, 進度比預想中還慢, 紀念一下第一個四分割視窗.

2010年5月9日 星期日

Ogre3D 應用層

 最近都在忙 Ogre3D 應用層的撰寫, 終於告一段落, 這應用層包含了一些常用功能的包裝, 大大的簡化了 Ogre3D 重覆性程式碼的撰寫, 有助於簡化日後的工作量.

 接下就要開始製作工具, 想了很多, 不想被 MFC 給綁死, 所以最後決定使用 wxWidgets 當作 UI 的界面層, 另一個好處是工具可以移值到 Linux/Mac 上, 除此之外, 也打算使用 SQL Lite 當作工具的 DB 來使用, 用來儲存一些數據及工具的環境等等.

 目前有兩個工具要撰寫, 地圖編輯器及 2D 動畫編輯器, 考慮了一下後決定先從地圖編輯器開始, 因為它比較單純, 沒有像動畫編輯器那樣的複雜, 畢竟在還不熟悉 wxWidgets 的情況下, 由此開始會是個比較好的選擇.

2010年4月17日 星期六

Ogre3D v1.7 與 OpenGL ES 1.1

 Ogre3D 從 v1.7版開始正式支援 OpenGL ES 1.1, 只是官方的原始碼缺少了很多東西, 整個建置的過程非常的不順利, 感覺上也許在 v 1.8版 支援 OpenGL ES 2.0的時候才會改善吧, 畢竟這個開發 OpenGL ES的新成員也是最近才剛加入的, 他正忙著因應 OpenGL ES 2.0 for iPhone而忙呢.

在網路上搜尋了很多資料, 並且改了 Ogre 原始碼一些地方才終於完成, 抓了張圖做紀念.



2010年4月16日 星期五

建置 Ogre3D 1.7 Windows版

 這應該算是一篇筆記文, 因為每次在建置 Ogre3D 1.7 版時總是忽略了幾個步驟, 詳細的建置步驟在 官方 wiki 上有 , 這裡只寫出容易忽略的地方.

  1. 系統的環境變數加上 BOOST_ROOT c:\xxxxxx
  2. 先建置 Boost.
  3. Ogre Dependencies 解開後要放在 Source 目錄下, 並且使用 VS 建置 Dependencies 下的專案以產生 .lib 檔.
  4. DirectX 似乎已沒有版本限制, 使用最新的就可以.

2010年4月13日 星期二

偵測記憶體洩漏 Visual Leak Detector

寫程式難免會遇到記憶體洩漏, 那是個大條且又會讓人頭痛的問題, 所幸的是現在有一些工具可以使用, 如 Dev Partner Studio, GlowCode...等等, 不過這些大都是商業軟體居多, 而 Visual C++ 本身也是有偵測記憶體洩漏的函式可以使用, 但是使用起來比較繁鎖, 現在有一個 OpenSource 的專案叫 Visual Leak Detector, 可以很容易的解決這個問題.

下面將簡單的介紹 Visual Leak Detector :

<安裝及環境設定>

  1. 先至 官網 下載檔案, 解壓縮後並安裝檔案.
  2. 設定檔, 從 [開始] > [程式集] > [Visual Leak Detector] > [Confifure], 然後會開啟一個 vld.ini.

下面列出 vld.ini 比較會需要使用到的參數, 詳細的說明可以在說明檔中找到,

  • ReportEncoding : 若回報資訊輸出至檔案, 檔案內文所使用的編碼方式, ascii, unicode.
  • ReportFile : 若回報資訊輸出至檔案, 輸出的檔案名稱.
  • ReportTo : 回報資訊輸出至何處, debugger 為 Visual Studio 除錯視窗, file 為檔案, both 為兩者都輸出.
  • StartDisabled : 載入時先關閉記憶體洩漏偵測, 有需要時再自行開啟.

使用 Windows7 時可能因為權限因素無法儲存 vld.ini, 請先將檔案複製到別處, 改完之後再複製到原目錄下.

3. 設定目錄, [工具] > [選項] > [專案和方案] > [VC++ 目錄], 在 [Include 檔案] 設置安裝目錄的 Include 目錄, 在 [程式庫檔] 設置安裝目錄的 Lib 目錄


<專案及原始碼>

  1. 若沒有 precompiled header 的話, 在每個檔案前都必須 include "vld.h", 若有 precompiled header, 如 stdafx.h, 則只要在最前面 include "vld.h" 即可, 不需每個檔案都有.
  2. 專案設定中, 設定 link vld.lib.


<其它>

  1. vld 只在 Debug 模式才有效用.
  2. 在原始碼中可以任意呼叫 VLDEnable() 或 VLDDisable() 開始或關閉 vld 的功能.

2010年4月11日 星期日

繪圖引擎

 繪圖引擎要開始整合了, 我覺得好像有點貪心, 居然想要整合三套不同的繪圖引擎, 實作了一下, 感覺上是不太可能, 只能說儘量, 在某些低階的部份還是必須要到各引擎專屬的功能, 因此, 繪圖引擎的整合上可能是要使用非常的高階的方法.

 初期會先整合雜項的功能, 之後才會開始製作獨立功能的項目, 處理這雜項的整合想必又會是一件挑戰, 畢竟要將不同的繪圖引擎使用單一界面來運作的作法, 是真的有點困難, 不過我還是會儘量做到我想要的, 路總是要想的長遠一點才行.

2010年3月28日 星期日

Multi-Core & Multi-Thread

 Multi-Core & Multi-Thread 是最近在做的一項工程, 本來是想全部自己寫, 不過後來覺得在某些地方似乎可以使用現成的就好, 然後自己在上層包一個應用層 API, 至於底層則想到了 OpenCL, 其它方法也是有想過, 如 OpenML 則不考慮, 因為並不適合, 而 nVidia 的 CUDA 只適合使用在 nVidia 的 GPU 上, 所以也不考慮.

 決定使用 OpenCL 之後就開始研究它, 但是目前 OpenCL 似乎支援度還不足, nVidia 的 OpenCL Lib 只支援 GPU. AMD 的 ATI 的 ATI Stream SDK 支援 CPU + GPU (可能只有 AMD CPU, 我還沒有去確認). Intel 似乎也有支援 OpenCL, 但是我找不到相關的 Library 可以使用, 而 Microsoft 似乎是想搞自己的 Compute Shaders 來推升 GPGPU 的應用.

 想了很久, 最後做了最折衷的方法, CPU 的部份自己寫, 也許功能沒有 OpenCL 來的完整與強憾, 不過功能只要適合自己使用就好, 如果有其它需求再加強即可, 至於 GPU 的部份統一使用 OpenCL. 目前在 CPU 上已完成一些初步的功能, 可以設定哪些 Core 使用幾個 Thread, 在應用上也可以設定 Task 允許在哪些 Core 上跑, 並且在底層實現了 TaskManager 物件化的構想, 這些只是最基本的功能, 完整的 TaskManager 功能還是有一段距離.

在這最基本的 TaskManager 上做了個小實驗, 結果如下圖所示 :