討論區快速選單
知識庫快速選單
軟實力課程1+1,第二科享5折優惠 討論區最近新進100則主題 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
OpenGL中要怎麼讓模型各個面都有光源
更改我的閱讀文章字型大小
作者 : a15752468()
[ 貼文 35 | 人氣 945 | 評價 0 | 評價/貼文 0 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/29 下午 06:40:28
我目前是依照白老鼠大的教學使用光源( 文章最下面 )

可是當我把模型轉動90度的時候,背面會是黑的,正面是有光源的

我對光源沒有研究,光源實在有點複雜,而我只是想要不論我如何轉動模型都可以看到模型( 不要是黑色的 )

不知道有沒有什麼簡單的方法,或是應該要怎麼做比較好



====================
  // ========prepare_lighting=========
  gGLtheta = fmodf( gGLtheta, 2*G_PI );
  gGLphi = fmodf( gGLphi, 2*G_PI );

  float light_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
  float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
  float light_position[4] = { sinf(gGLtheta) * cosf(gGLphi), cosf(gGLtheta), -sinf(gGLtheta) * sinf(gGLphi), 0 };

  glMaterialfv(GL_FRONT_AND_BACK , GL_DIFFUSE, mat_diffuse);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  glEnable( GL_LIGHT0 );
  // ===========prepare_lighting==========
  glEnable( GL_DEPTH_TEST );
  glEnable( GL_LIGHTING );
作者 : doraemon(人稱阿牛)
[ 貼文 74 | 人氣 5056 | 評價 220 | 評價/貼文 2.97 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/29 下午 09:51:36
可以增加光源讓每個面旋轉時都能受到光照

不過最簡單的方式就是設定物體material Ambient color, 只是不是很好看就是

作者 : a15752468(飄風)
[ 貼文 35 | 人氣 945 | 評價 0 | 評價/貼文 0 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/29 下午 11:24:12

>可以增加光源讓每個面旋轉時都能受到光照
>
>不過最簡單的方式就是設定物體material Ambient color, 只是不是很好看就是
>
>

可以請問一下怎麼設定每個面都能瘦到光照嗎..

因為那段代碼我不是很懂,不過GL_FRONT_AND_BACK這個應該就是指正反面都有了吧

只是還是只有正面有...

 float light_diffuse[4] float mat_diffuse[4] float light_position[4]
這三個我實在不知道用途...是不是跟這個有關...@@
作者 : cromayen2000(CROMAYEN2000) OpenGL卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 645 | 人氣 22308 | 評價 2260 | 評價/貼文 3.5 | 送出評價 38 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/30 下午 04:27:29
這對剛開始學習 OpenGL 的人是很常見的問題

基本上 我們不會只打一個燈光 如果再有攝影機的狀況時,以攝影機的位置與攝影機的觀察點為基準在前面會打一個主光源,背後會打一個輔助光源,當然適當的調整 Ambient 值(環境光)也是有必要的,單從你的顯示的部份程式碼可以看出你完全沒有設定 Ambient 所以光線的環境值的地方就空掉了

改成這樣應該會好點

gGLtheta = fmodf( gGLtheta, 2*G_PI );
gGLphi = fmodf( gGLphi, 2*G_PI );

// 定義燈光的環境值
float light_ambient[4] = {0.4, 0.4, 0.4, 1.0};
// 定義燈光的反射值
float light_diffuse[4] = {0.6, 0.6, 0.6, 1.0};
float light_position[4] = { sinf(gGLtheta) * cosf(gGLphi), cosf(gGLtheta), -sinf(gGLtheta) * sinf(gGLphi), 0 };
// 定義多邊型表面的環境值
float mat_ambient[4] = {1.0, 1.0, 1.0, 1.0};
// 定義多邊型表面的反射值
float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};

glMaterialfv(GL_FRONT_AND_BACK , GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK , GL_DIFFUSE, mat_diffuse);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable( GL_LIGHT0 );

這是一種 Phong reflection model 的渲染模型 有興趣的話可以找相關的資料
作者 : a15752468(飄風)
[ 貼文 35 | 人氣 945 | 評價 0 | 評價/貼文 0 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/30 下午 11:45:53

>這對剛開始學習 OpenGL 的人是很常見的問題
>
>基本上 我們不會只打一個燈光 如果再有攝影機的狀況時,以攝影機的位置與攝影機的觀察點為基準在前面會打一個主光源,背後會打一個輔助光源,當然適當的調整 Ambient 值(環境光)也是有必要的,單從你的顯示的部份程式碼可以看出你完全沒有設定 Ambient 所以光線的環境值的地方就空掉了
>
>改成這樣應該會好點
>
>gGLtheta = fmodf( gGLtheta, 2*G_PI );
>gGLphi = fmodf( gGLphi, 2*G_PI );
>
>// 定義燈光的環境值
>float light_ambient[4] = {0.4, 0.4, 0.4, 1.0};
>// 定義燈光的反射值
>float light_diffuse[4] = {0.6, 0.6, 0.6, 1.0};
>float light_position[4] = { sinf(gGLtheta) * cosf(gGLphi), cosf(gGLtheta), -sinf(gGLtheta) * sinf(gGLphi), 0 };
>// 定義多邊型表面的環境值
>float mat_ambient[4] = {1.0, 1.0, 1.0, 1.0};
>// 定義多邊型表面的反射值
>float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
>
>glMaterialfv(GL_FRONT_AND_BACK , GL_AMBIENT, mat_ambient);
>glMaterialfv(GL_FRONT_AND_BACK , GL_DIFFUSE, mat_diffuse);
>
>glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
>glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
>glLightfv(GL_LIGHT0, GL_POSITION, light_position);
>glEnable( GL_LIGHT0 );
>
>這是一種 Phong reflection model 的渲染模型 有興趣的話可以找相關的資料

謝謝!!~

這樣的確有比原本的好,原本的轉到後面就幾乎全黑了,改成這樣的話還會有

不過如果是轉側面,背面的地方還是黑的...這樣應該要怎麼做呢...
作者 : cromayen2000(CROMAYEN2000) OpenGL卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 645 | 人氣 22308 | 評價 2260 | 評價/貼文 3.5 | 送出評價 38 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/31 上午 10:30:24
想要更自然的表現的話就需要多打幾個燈光 通常是根據模型的位置在前後各打一個燈光
作者 : a15752468(飄風)
[ 貼文 35 | 人氣 945 | 評價 0 | 評價/貼文 0 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/6/1 上午 01:10:48
要怎麼在指定的位置打光0.0

是改這個嗎float light_position[4] = { sinf(gGLtheta) * cosf(gGLphi), cosf(gGLtheta), -sinf(gGLtheta) * sinf(gGLphi), 0 };

可是不知道為什麼要用sinf等等的...

如果我想在後面也打一個光的話,應該要怎麼設定呢@@?
作者 : cromayen2000(CROMAYEN2000) OpenGL卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 645 | 人氣 22308 | 評價 2260 | 評價/貼文 3.5 | 送出評價 38 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/6/1 下午 01:39:56

>要怎麼在指定的位置打光0.0
>是改這個嗎float light_position[4] = { sinf(gGLtheta) * cosf(gGLphi), cosf(gGLtheta), -sinf(gGLtheta) * sinf(gGLphi), 0 };
>可是不知道為什麼要用sinf等等的...
>如果我想在後面也打一個光的話,應該要怎麼設定呢@@?

歐 這是這在設定 燈光的位置沒錯 應該是根據你旋轉的方向設定的 好讓你的燈光出現在的指定的位置,這是一個球座標的表示法
http://zh.wikipedia.org/zh-hant/%E7%90%83%E5%9D%90%E6%A8%99%E7%B3%BB

如果想設定第二個燈光

// 定義燈光2的環境值
float light_ambient2[4] = {0.2, 0.2, 0.2, 1.0};
// 定義燈光的反射值
float light_diffuse2[4] = {0.3, 0.3, 0.3, 1.0};
float light_position2[4] = { sinf(gGLtheta) * cosf(gGLphi + 3.1415f), cosf(-gGLtheta), -sinf(gGLtheta) * sinf(gGLphi+3.1415f), 0 };
>glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient2);
>glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse2);
>glLightfv(GL_LIGHT1, GL_POSITION, light_position2);
>glEnable( GL_LIGHT1 );

燈光的位置可能要調整一下
作者 : a15752468(飄風)
[ 貼文 35 | 人氣 945 | 評價 0 | 評價/貼文 0 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/6/4 上午 12:56:53
感謝~~可以了!!
 板主 : 白老鼠(Gary)
 > OpenGL - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - OpenGL - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
OpenGL
1 白老鼠(Gary) 2710 
2 CROMAYEN2000 1530 
3 aming 500 
4 東昇 380 
5 PLAYER 120 
6 富伯 110 
7 qq 100 
8 NDark 80 
9 ozzy 60 
10 simula 60 
OpenGL
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875