寄件者 Melbourne - 2010.07.17~2010.07.25 |
2010年11月18日 星期四
Ogre3D 課程定位
2010年11月17日 星期三
[電腦圖學] Texture Synthesis II
在上一篇文章中討論了影像合成的應用,網路上也有許多的商品展示。而今天想探討的是技術、方法。影像合成技術非常的迷人,能創造許多幾可亂真的圖像,比真實更真實,即便是極度虛幻的後製照片,仍難以識別是否由真實世界中所拍攝出來。
http://www.codeproject.com/KB/graphics/quilting.aspx
2010年10月29日 星期五
[電腦圖學] Texture Synthesis
可曾思考過網路上的照片其真實性究竟如何,"有圖有真相"是否為永恆的真理!或許心中又會這麼想,哪有這麼多閒人繪花時間將如此複雜的技術來合成一張影像,移除掉照片中的某些物件又不會讓人發覺破綻。但隨著時代變態般的演進,一些不可思議的事情真的發生了...。
寄件者 Melbourne - 2010.07.17~2010.07.25 |
2010年9月14日 星期二
[效能分析] 斷層掃描,PerfHUD!
撰寫程式常常會用輔助工具進行除錯與效能分析,例如 VC 、 gdb 、 vtune 、 valgrind ...等。但開發圖形應用程式時要診斷程式中的錯誤與瓶頸,卻是一個十分令人頭痛的問題。一張影像是由成千上萬個像素與物件所構成,因此有時要發現其中的問題,真的有如大海撈針(這麼說是有點誇張,哈哈...)。而陪伴著我們度過每天都想要砸電腦的好朋友,其中最重要的非 PerfHUD 莫屬。 |
寄件者 Melbourne - 2010.07.17~2010.07.25 |
2010年9月2日 星期四
[電腦圖學] Gamma Correction (II)
由先前的討論,知道螢幕輸出的誤差可因資料處理而修正,在此將更進一步的討論修正方法,並舉一些實例來展示差異,可觀察是否具備前篇文章所描述的狀況。
寄件者 Melbourne - 2010.07.17~2010.07.25 |
2010年8月30日 星期一
[電腦圖學] Gamma Correction (I)
最近回想起 GDC 2010 有一場由《祕境探險 2》(《Uncharted 2》) 的繪圖工程師以「HDR Lighting」為主題的演說,分享他們如何將一個想法與概念透過繪圖技術達到,演講過程十分精彩。
遊戲中的色調設計,即便對於有經驗的美術總監而言都是十分嚴峻的考驗,但對於新人絕對是最容易被忽略的細節之一。為什麼色調的定義如此重要?因為它屬於最核心的一種設定,引響遊戲風格,控制著玩家對時間、氣候與環境氛圍的感受。因此能明確的定義色調,才能引領著龐大的美術團隊朝正確的目標前進。對於色調的了解真的如此重要嗎!...我想只有痛過一次你才知道。因此我響探討 Gamma Correction 的議題,為什麼要這麼做以及其影響。
寄件者 Melbourne - 2010.07.17~2010.07.25 |
2010年8月24日 星期二
[C++ 程式設計]嵌入式系統繪圖函式庫, OpenGL ES !!
有設計過 3D 圖形程式的人應該都接觸過 OpenGL (或是DirectX)。而使用過 OpenGL 開發應用程式一定常感到困擾,因為它還是屬於序列式( procedural library)的函式庫,這意味著若我們要使用某些特定功能時,可能同時要透過數個函式並熟知其複雜的相依性,這容易造成程式錯誤又難以分析問題。另外 OpenGL 另一個令人頭痛的問題,就是規格會依不同廠商而產生差異性,除了使用上有許多條件與限制之外,函式與參數的名稱有時變得十分冗長又不直覺。
2010年8月3日 星期二
[C++ 程式設計]Visual Studio 專案精靈
今天介紹 Visual Studio 的「Custom Wizard」,許多人會稱呼他為專案精靈,在此我也以專案精靈稱呼。
撰寫一些程式時,發現建構專案的過程大多步驟都千篇一律但卻又十分繁瑣,每當要建立類似的專案時,前期的準備工作總是令人感到特別痛苦。不過令人慶幸的,專案精靈是一個建立同性質專案的好幫手。舉了例子,我常撰寫簡單的 3D 應用程式,因此我需要用 Win32 視窗程式設計與 OpenGL 等 3D 繪圖 API 來開發程式,但光是一個簡單的視窗開啟與前期的初始化工作就得寫上數百行的程式碼,而往往應用程式大多設定工作又大同小異,因此每要另開一新專案時,總令人感到痛苦萬分。
2010年7月26日 星期一
[C++ 程式設計]加速編譯方法 - 分享函式庫
完整的編譯過程,除了編譯時間(compile time)之外,另一個花費時間的編譯工作就是連結時間(linking time)。linking 的目的是將所有編譯後的目標檔 (*.obj) 組合成可執行的執行檔,因此組合的動作會隨程式的複雜度越高花費越多時間。因此是否曾思考過,那些已經被編譯過的程式以及執行檔可不需重新經過編譯與組合的程序,能有效的被重複利用。
分享函式庫 (Share Libraries)
使用 share libraries 的方法可避免重複編譯與冗長的連結時間,
2010年7月8日 星期四
[C++ 程式設計]加速編譯方法 - 編譯器設定
編譯器的環境設定也是引響編譯速度的主要原因之一,而環境設定的議題可以從許多的面向討論。
最佳化設定
首先最佳化的設定,在 Visual Studio 或是 gcc 上都有相似的設定,不同的最佳化程度可能區分成 O1 、 O2 、 O3 等,而隨著最佳化的效果越好,所需要花費的編譯時間也相對越高。通成數字越大表示使用越高級的最佳化,因此在除錯或是想要快速編譯時,可以選擇較低階的最佳化設定,如 O1,或是關閉任何最佳化選項。
2010年7月7日 星期三
[C++ 程式設計]加速編譯方法 - 相依性問題
降低程式相依性
儘可能減少在 header 檔中 include 多餘的 header 檔。因為這樣會提升物件之間的相依性,當我們更動 header 檔 A.h 時,編譯器會找出所有 include "A.h" 的 header 檔,會將他們也當做更動過的檔案,所有更動過的檔案都必須重新被編譯。因此沒有妥善規劃好標頭檔的相依性,將會導致許多的程式都需要被重新編譯,這將會浪費更多的編譯時間。
2010年4月22日 星期四
2010年4月21日 星期三
2010年4月15日 星期四
ARM Mali 200 效能驗證工作 - 環境建立
這幾天接獲新任務,要驗證新的開發平台希望能取代公司舊的 2D Embedded 系統,而此 embedded 是能支援 OpenGL ES 2.0。本想 OpenGL API 還蠻熟析的,應該能很快處理完此工作,不料 embedded 的環境真的陽春很多,許多東西都要考量相依性,光是函式庫和環境的建立就花費許多的時間。
昔日的工作都過於侷限在繪圖領域,不過最近突然對各種技術都有很高的興趣。為了能順利完成此任務,在環境建立部分花了一點時間思考,也找了幾位專員討論,獨立的 linux pc 與網路連線都是一開始的想法,但身邊的資源實在太有限了,因此最後決定用 Ubuntu + VMWare ,雖然不算完美,但確實節省了很多時間。
採用 VMWare 的好處很多,包括可以讓我工作的環境部用擺放一大堆的機械,而我原本的 pc 等級也夠高,因此跑起來很流暢,在加上本機上兩個作業系統同時運作,會比透過網路遠端操控來得便利很多。
而缺點方面,最致命的缺陷應該就是硬體資源都是用軟體的方式模擬出來的,所以無法百分百發揮硬體效能,尤其這一次的工作需要較多的繪圖卡驗證工作,但 VMWare 始終只能模擬 SVGA II 的顯示晶片,我要執行的 OpenGL ES 程式是無法執行的,因為 SVGA II 只支援到 OpenGL 1.3 ,而 OpenGL ES 2.0 Emulator 的環境,再使用 ELG 一些功能時,必須要有 OpenGL 1.4 以上才可支援,因此對工作還是有一些不便利性,不過至少可以編譯 ARM 的程式,只是用 Emulator 執行時會丟出例外訊息。
另外環境上的不便利性就是仍然需要透過隨身碟傳送編液後的程式,開發端和驗證端需要不斷的傳送更新資料,因此 USB 的插拔還有繁瑣的指令,都會導致工作上的不流暢,這裡應該可以花點時間改善,應該會大大提升工作效率。
這次的工作也學習到很多西的東西,除了上述的 VMWare 系統外,也使用了 VMWare tools 這好用的工具,讓兩作業系統能直接相容複製、貼上等指令,這樣的環境讓工作方便很多。而在安裝編譯環境時,也第一次接觸到 toolchain ,而最後也比較清楚 Toolchain 指的就是一個程式開發的完整工作環境,包含了所有成是開發過程中需要使用的工具,而好的 Toolchain 可以幫你串連起整個工作流程,讓你每次在編譯或更新產品時,只要簡短的夏達幾個指令就可完成,也可透過更改些許參數就能編譯出不同版本,是將很多小程式與 makefile 具合起來的工具集。這是使用的 toolchain 是 arm-2008q3... 可在 CodeSourcery 下載。
原本 linux 的操作環境都快忘了,這次也正好可讓我在溫習一下工作環境。
2010年4月14日 星期三
2010年4月13日 星期二
[Web 程式設計]初體驗
最近非常熱衷於使用一些網路服務系統,也深刻的體會網路系統迷人之處。而今天再我新建立的網誌中發現一個叫做「小工具」的外掛系統,讓使用者可以加入網路上有人開發好的小工具,同時我們也可以自己開發一些小工具放到網路上供大家使用,而在 google blogger 中此小工具的英文名稱為 gadgets 以下為 google 的介紹, 出自於 Gadgets for Blogger :
At Google, gadgets are simple HTML and JavaScript applications that can be embedded in web pages and other apps, including Blogger.簡而言之就是我們可以用 HTML 與 JavaScript 開發小工具,而 Blogger 已提供一完整的環境讓我們可以快速整合至我們的網頁。另外一個很重要的東西, Google 提供了一套新的 API 稱之為 Blogger Data API 讓使用者能直接檢視或編輯 Blogger 內容,以下為網站說明:
Every Blogger blog is a gadget container. What's more, every blog is an OpenSocial gadget container powered by Friend Connect. That means as a gadget developer you can leverage social APIs to build engaging tools for bloggers and their audience.
When you build a gadget for Blogger, it becomes available to millions of active bloggers. Just submit your gadget to us, and it will immediately surface in Blogger.com where users can easily browse, configure, and add your gadget to their blog's sidebar.
So now that you know Blogger is a great distribution platform for your gadget, what are you waiting for? Get started building gadgets for Blogger now!
The Blogger Data API allows client applications to view and update Blogger content in the form of Google Data API feeds. Your client application can use the Data API to create new blog posts, edit or delete existing posts, and query for posts that match particular criteria.雖然目前對網路程式設計仍一知半解,但經過這次對框架的了解過後,也算是一個好的開始。
Here are some of the things you can do with the Blogger Data API:
- Add a running list of blog posts and comments to a site.
- Create a desktop application or plugin that allows users to create and post entries from the desktop.
- Create a blog aggregator application.