為什麼這篇glNormal鄉民發文收入到精華區:因為在glNormal這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hcl012 (怪龍-卡西歐魯)看板C_and_CPP標題[問題] OpenGL光源無法使用時間...
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenGL
問題(Question):
首先我在init函式裡面用下面的程式設定了光源材質
float light_a[] = { 1.0f, 1.0f, 1.0f, 1.0f};
float light_d[] = { 1.0f, 1.0f, 1.0f, 1.0f};
float light_s[] = { 1.0f, 1.0f, 1.0f, 1.0f};
float material_a[] = { 0.1f, 0.1f, 0.1f, 1.0f};
float material_d[] = { 0.5f, 0.5f, 0.5f, 1.0f};
float material_s[] = { 0.3f, 0.3f, 0.3f, 1.0f};
float light_position[] = { 3.0f, 3.0f, 3.0f};
//set up the light source
glEnable(GL_LIGHTING);
glLightfv( GL_LIGHT0, GL_AMBIENT, light_a);
glLightfv( GL_LIGHT0, GL_DIFFUSE, light_d);
glLightfv( GL_LIGHT0, GL_SPECULAR,light_s);
glLightfv( GL_LIGHT0, GL_POSITION,light_position);
glEnable(GL_LIGHT0);
glMaterialfv( GL_FRONT, GL_AMBIENT, material_a);
glMaterialfv( GL_FRONT, GL_DIFFUSE, material_d);
glMaterialfv( GL_FRONT, GL_SPECULAR, material_s);
然後進入display funciton,在每個glVertex前面都加了一個glNormal輸入法向量
照理講這樣顯示出來的結果就會有光影變化了
但是最後畫面卻是像這樣
http://ppt.cc/tG1p
我稍微改變了一下ambient、diffuse和specular的顏色
發現是因為只有ambient被顯示出來,diffuse和specular消失了
我檢查過裝著normal vector的陣列,沒有任何問題
也試著改過光源的位置,但是也是一點用也沒有
想請教一下還有可能是甚麼原因呢?
直覺告訴我這應該只是少了一個很簡單的東西
但是已經翻教學翻了一個周末還是一無所獲
在此先感謝各位板友的幫助
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.99.86.102
感謝說明
再借這篇文章問個小問題
http://ppt.cc/14Z7
這張圖片是我在Enable GL_LIGHTING前的效果
原本Mesh上就有自己的顏色
每個Vertex大概是像這樣寫
glColor3f();
glNormal3f();
glVertex3f();
但是在Enable GL_LIGHTING後卻變成這樣
http://ppt.cc/dCM0
原本Mesh上指定的顏色不見了
只剩下光影變化,想問一下有辦法保留原本glColor輸入的顏色打光嗎?
還是說每一個Vertex都要換一次material來指定顏色呢?
※ 編輯: hcl012 來自: 68.99.86.102 (11/01 14:33)