[問題] OpenGL光源無法使用

看板C_and_CPP (C/C++)作者 (怪龍-卡西歐魯)時間14年前 (2011/10/31 05:37), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/1
開發平台(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

10/31 09:24, , 1F
把 position 改成4維試試..加上1.0f
10/31 09:24, 1F

10/31 09:32, , 2F
終於有光源了,非常感謝
10/31 09:32, 2F

10/31 23:56, , 3F
補充說明,light的設定會受到modelview matrix影響
10/31 23:56, 3F

10/31 23:57, , 4F
第四維設1.0f就會移動,設0.0f就只能旋轉或是縮放
10/31 23:57, 4F

10/31 23:58, , 5F
所以點光源要設1.0f,平行光則是設0.0f
10/31 23:58, 5F
感謝說明 再借這篇文章問個小問題 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)

11/01 22:23, , 6F
沒錯, GL lighting的運算模式, 是以light當光照強度, 以
11/01 22:23, 6F

11/01 22:24, , 7F
material當反射程度, 以模擬光照反射使你看到物體顏色的
11/01 22:24, 7F

11/01 22:24, , 8F
機制; 所以一但你開了lighting, 原本的color屬性就會被
11/01 22:24, 8F

11/01 22:25, , 9F
覆蓋掉. 如果你希望用color屬性直接當做material的基礎
11/01 22:25, 9F

11/01 22:26, , 10F
色的話, 你可以查一下color material的使用方式:)
11/01 22:26, 10F

11/01 22:28, , 11F
http://0rz.tw/7GvJn 成色如何, 可能要想想調調看XD
11/01 22:28, 11F
文章代碼(AID): #1EhSEmkC (C_and_CPP)
文章代碼(AID): #1EhSEmkC (C_and_CPP)