23 11月 2010

Big Step, the Phong Shading.

事隔多年, 終於完成當初未完的作業 Homework #02.
也太弱, 之前設定的5天一篇的目標, 一下子又到了月底,
日子過很快, 繼續把握時間!


Results: 
Flat Shading

Gouraud Shading

Phong Shading


當初一直看課本的內容, 在想要怎麼implement "自行內插出每個pixel的normal vector", 
然後就一直做不出來...
可能是當時做影像處理的職業病吧, 壓根沒想到原來是在vertex shader按照最一般的example codes即可 = ="
這個作業真的可以學到很多東西 (假設在過程中跟我犯了一樣多的錯 >.< )

1. 第一個, 也是最久的一個問題, 為什麼Shader objects的result通通只有一個顏色?
The answer is the "color tracking" skill ( glEnable(GL_COLOR_MATERIAL), glColorMaterial() ).
因為 Enable Color Tracking, we have to assign new color before each glBegin().
經實驗證明, color tracking在每個glBegin and glEnd中, 不會發生效用. It should be:
for(int i=0;i< int(TRIobj->triangleList.size());i++)
{
  glColor3fv(TRIobj->triangleList[i].color);
  glBegin(GL_TRIANGLES);

  for(int j=0;j<3;j++){    
    glNormal3dv( TRIobj->triangleList[i].normal[j] );
    glVertex3dv( TRIobj->triangleList[i].vertex[j] );  // assign array form 
  }
  glEnd();
}

2. 過程中, 因為想要對shader objects debug, 所以卡在glUniformLocation()一段時間, 最後才發現, 一直get不到location的原因是:The value of input uniform variables can't be changed during the shader objects.

3. 惰性慫恿我不需三個Lights都Implement, 反正搞懂GLSL了阿!...幸好, 在coding 後方的Light時, 光線一直"透到前方平面"來, 讓我這門外漢以為還有Polygon的透明屬性沒有設定好, 又K了一陣子書, 結論是:因為座標轉換的觀念還不夠熟, 所以透光的效果其實是因為在打光前, 座標已經被轉換到前方平面來了.

回頭想想寫這份作業的過程, 以及手邊記錄著思考過程的手稿, 這些那些, 都是永遠的回憶.
不只跨越了當年的失落, 更在過程中, 發現了大量的網路資源, 高手們的Blog...
最後, 更被前輩們的網頁所感動, 既然要留下這些學習過程, 網頁編輯的功夫怎麼能省,
於是, 花了幾天靜下心來, 學習一些基本的HTML and CSS語法, 東湊西湊, 就是你所看的這些 :D

11 11月 2010

Unable to load DLL, 因為應用程式的並列設定不正確.

Platform:  Visual C# 2010
Target Library: DLL file that build by VC++ 2005.

工作上, 因為要在 Windows Form上使用舊有的native C++ DLL,
花了好一段時間解這個問題.

其中當然包括上網Google "因為應用程式的並列設定不正確"這個字串, 然後試了一些
可能有用 卻無效的方式.
後來發現要debug, 還是少用中文, 因為中文的Error Message是:

Unable to load DLL 'ECGAlgorithmWin32.dll': 因為應用程式的並列設定不正確,所以無法啟動。如需詳細資訊,請參閱應用程式事件記錄檔,或使用命令列工具 sxstrace.exe (Exception from HRESULT: 0x800736B1)
然而經由最後一段代碼, 查得英文的的Message是:
Unable to load DLL exception. This application has failed to start because the application configuration is incorrect ...
所以一直被"並列設定不正確"所誤導debug方向阿 T.T"

最終找到一個非常有用的MSDN BLOG,