[爆卦]glNormal是什麼?優點缺點精華區懶人包

為什麼這篇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
einstain:把 position 改成4維試試..加上1.0f 10/31 09:24
hcl012:終於有光源了,非常感謝 10/31 09:32
iamstudent:補充說明,light的設定會受到modelview matrix影響 10/31 23:56
iamstudent:第四維設1.0f就會移動,設0.0f就只能旋轉或是縮放 10/31 23:57
iamstudent:所以點光源要設1.0f,平行光則是設0.0f 10/31 23:58

感謝說明


再借這篇文章問個小問題

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)
VictorTom:沒錯, GL lighting的運算模式, 是以light當光照強度, 以 11/01 22:23
VictorTom:material當反射程度, 以模擬光照反射使你看到物體顏色的 11/01 22:24
VictorTom:機制; 所以一但你開了lighting, 原本的color屬性就會被 11/01 22:24
VictorTom:覆蓋掉. 如果你希望用color屬性直接當做material的基礎 11/01 22:25
VictorTom:色的話, 你可以查一下color material的使用方式:) 11/01 22:26
VictorTom:http://0rz.tw/7GvJn 成色如何, 可能要想想調調看XD 11/01 22:28

你可能也想看看

搜尋相關網站