Mar 19, 2008

不知道該興奮還是沮喪

從Bali回來之後就一直停滯不前的3d程式,這幾天終於再次動了起來,令人沮喪的是去年「應該」已經解決掉的問題(錯的矩陣畫出錯的結果,boundingbox計算錯誤等等),當時不知道哪根筋不對,改好的程式碼居然沒送進svn……所以這幾天晚上的工作就是在解幾個月前就解掉的問題!

昨天終於修正了rotation matrix 跟view matrix,今晚卻發現連translate matrix都寫錯了!寫錯了還不致於讓我感到沮喪,問題是一個簡單的座標轉換居然花了十多分鐘才搞定……(線性代數被當不是沒有原因的)。這些累積的小錯誤已經開始讓我懷疑起自己的智商了,該不會是在公司寫的程試完全用不到數學的關係吧!

明天要開始寫寫簡單的LOD,希望別再出錯了。

Mar 9, 2008

北海岸單車一日遊

這個星期跟tcming約了要騎單車去富基漁港,因為上個禮拜太晚出發,我只騎到三芝就折返了,所以這次改成上午出發!後來果子狸也加入了。

一行人先騎到紅樹林捷運站後,轉向台二線,經過一翻「熱身」運動,終於到了富基漁港,然而,真正要命的路線就從這裡開始!果子狸提議直接繞北海岸!據他的說法是繞北海岸跟往回騎是「差不多」的……事後也「差不多」騎了100km……

生意人果然很會說謊話,每個人都問「帥哥」吃飯嗎?當然不吃,傳說中這個漁港的食物很貴,走在路上看不到標價更讓我怯步!腦袋裡只是盤算著要不要問「美女,可以免費讓我們吃頓飯嗎?」離開富基漁港,順路去了趟富貴角燈塔。乖乖……這兩位先生第一天認識就可以很自然的開始搞笑了……

我對這個燈塔一點印象都沒有,看來長這麼大這是第一次來了!

當然……愛駒這時得來張獨照!

接下來的路線是十八王公廟→野柳→金山→萬里→基隆→ooxx堵→汐止→圓山。我在野柳說了句話:第一次騎當然要撐完,這樣才可以說騎過北海岸!所以最後我硬著頭皮騎完了……真是禍從口出啊!

無力一一紀錄啦,現在可是靠著驚人的意志力撐住我的眼皮!


好用的google map!

Mar 6, 2008

我的 virtual constructor

今晚突發奇想,寫出了一段自以為了不起的程式……

首先我有一個base class:

class sdBase
{
public:
sdBase();
virtual ~sdBase() = 0;
};

加上一堆繼承它的class:

class A : public sdBase;
class B : public sdBase;
class C : public sdBase;
class D : public sdBase;

一開始的virtual constuctor長成這個樣子:

sdBase* VirtualCtor(int iType)
{
switch (iType)
{
case 0:
return new A();
case 1:
return new B();
......
}
}

一個很明顯的問題是:當新的類別越來越多時,這個switch就會影響到效能。所以我打算建一個constructor的array,於是……

template <class B, class T>
inline B* VirtualConstructor() { return new T(); }

typedef sdBase* (*VCtor)();

static const VCtor rgCtor[] =
{
VirtualConstructor < sdBase, A>,
VirtualConstructor < sdBase, B>,
VirtualConstructor < sdBase, C>,
VirtualConstructor < sdBase, D>,
VirtualConstructor < sdBase, E>,
VirtualConstructor < sdBase, F>,
......
};

最後:

sdBase* VirtualCtor(int idType)
{
return rgCtor[idType]();
}

現在新版的虛擬建構子以常數時間來搜尋真正的建構子了!
(一些有的沒的檢查請自行想像)

Mar 5, 2008

新伙伴

開始工作時買了人生第一台notebook:M6N!當時滿懷雄心壯志地想寫些有趣的遊戲程式,所以挑了台有獨立顯卡的nb(ATI RADEON9600),雖然近三年的時間幾乎不用來打電動,最後也沒寫出什麼大不了的程式。2007年中,家裡的PC瀕臨死亡,才開始了它重大的任務:WOW。不過程式還是繼續寫,網頁也繼續逛。二月底它終於罷工了!三年半來第一次徹底陣亡,再也無法開機。經過幾天地掙扎,終於把它送去士林的華碩皇家俱樂部。

兩天就修好了!不過經過上個星期六的測試,雖然「可以開機」了,但是在一小時之內出現藍頻五次!所以往後它的任務是做些無關痛癢的工作。(在網路上看了些討論後,決定放棄繼續送修……)


二二八放假當天,直奔光華商場,東問西問後買了G1S!又是有獨顯的,不過這次換NVIDIA的8600 GT,可以跑DX10是我最低的要求!個人懶得花時間買東西,更不會殺價,所以沒能來個好康報告。逛了幾個小時的心得是……這些銷售人員根本搞不清楚自己在賣什麼東西啊!G1S的螢幕兩側有閃光燈,「傳說中」在執行dirextx時會閃爍……還真是個俗氣的規格!當我打算買G1S時,第一個念頭就是「要是這兩個燈不能關,就放棄這一台」!所以逛光華商場時每個我嘗試打聽報價的銷售員都被我問過這個問題:「燈能不能關?」當然也有一致性的答案:「應該不能」,結果回到家開機不到五分鐘就被我關了……。(不過最後一位銷售員看起來蠻友善的,所以我就結束逛街行程)。整體規格很吸引我,拿來寫程式一定很棒……

附記:
剛開始用的時候會覺得硬碟跟風扇很吵,風扇吵就算了,散熱是很重要的,但是明明沒工作硬碟卻叫個不停就很煩!最後終於找到原因,原來C槽的index功能被打開了!關掉之後安靜多了。