青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評(píng)論

opengl es 燈光

這一章將在你的程序中加入燈光,使場景看起來和真實(shí)場景一樣。

燈光

opengl中燈光分為好幾種,都可以加入到你的場景中。

Ambiend Light 環(huán)境光
環(huán)境光沒有確切的來源方向,當(dāng)環(huán)境光照射到物體時(shí),光被反射到各個(gè)方向。

Diffuse Light 漫射光
漫射光不同于環(huán)境光,它來自某個(gè)方向,但和環(huán)境光一樣,照射到物體時(shí),會(huì)被反射到各個(gè)方向。

Specular Light 鏡面光
鏡面光和漫射光一樣是有方向的,但它反射方向是一定的,而不像漫射光一樣反射到各個(gè)方向。所以當(dāng)鏡面光照射到物體時(shí),你會(huì)看到物體表面被照射的亮點(diǎn)。

Emissive Light 發(fā)射光
它來自于某一物體,該物體散發(fā)出大量的光,但不會(huì)被任何物體面反射。

為了更好的理解這幾種光,我從網(wǎng)絡(luò)上摘抄了一段定義:
    * 環(huán)境光——經(jīng)過多次反射而來的光稱為環(huán)境光,無法確定其最初的方向,但當(dāng)特定的光源關(guān)閉后,它們將消失.
    * 全局環(huán)境光——它們并非來自特定的光源,這些光經(jīng)過了多次散射,已經(jīng)無法確定其光源位于何處.
    * 散射光——來自同一方向,照射到物體表面后,將沿各個(gè)方向均勻反射,因此,無論從哪個(gè)方向觀察,表面的亮度都相同.
    * 鏡面反射光——來自特定方向,也被反射到特定方向.鏡面反射度與之相關(guān).
    * 材質(zhì)發(fā)射光——用于模擬發(fā)光物體.在OpenGL光照模型中,表面的發(fā)射光增加了物體的亮度,它不受光源的影響,另外,發(fā)射光不會(huì)給整個(gè)場景中增加光線.

材質(zhì)

你不光可以設(shè)置光的屬性,而且還可以指定不同的面對(duì)光照作出的反應(yīng),這就要指定材質(zhì)屬性。
這就指定了一個(gè)面對(duì)光源反射多少。

法線

法線是一個(gè)向量垂直于(90度)某一特定面,就稱這個(gè)向量是某個(gè)面的法線。法線可以用于光的計(jì)算。如果你想讓畫出的物體對(duì)光源產(chǎn)生影響,那么必須指定物體每個(gè)面的法線。下面將會(huì)說明。

另一個(gè)需要注意的一點(diǎn)是,法線要單位化,我們不會(huì)深入數(shù)學(xué)計(jì)算,這不是我們這章的目的。如果需要會(huì)在將來某章中講解。簡明的說,一個(gè)向量的長度等于各個(gè)向量分量的平方和的平方根,再把每個(gè)向量的分量除以這個(gè)值。現(xiàn)在不需要過多擔(dān)心這個(gè)。

程序代碼:

下面定義兩個(gè)顏色數(shù)組,一個(gè)用于環(huán)境光,一個(gè)用于漫射光,它們是光源的顏色值。
float lightAmbient[] = { 0.2f, 0.3f, 0.6f, 1.0f };
float lightDiffuse[] = { 0.2f, 0.3f, 0.6f, 1.0f };

下面創(chuàng)建一個(gè)材質(zhì)屬性數(shù)組,分別用于環(huán)境光和漫射光。
用材質(zhì)屬性值乘以光源值得出面的反射顏色值,下面的值將會(huì)導(dǎo)致面反射的光失去接收光的百分之四十。每個(gè)值表示特定顏色被反射的數(shù)量。
float matAmbient[] = { 0.6f, 0.6f, 0.6f, 1.0f };
float matDiffuse[] = { 0.6f, 0.6f, 0.6f, 1.0f };

void init()
{
首先先啟用光源,這樣光才會(huì)在場景中起作用。
glEnable(GL_LIGHTING);

opengl最多允許8個(gè)光源,要使用某個(gè)光源,需要使用glEnable打開它,光源的編號(hào)是GL_LIGHTX,X的值是0---7。
指定材質(zhì)屬性,可以使用glMaterialfv和glMaterialf ,glMaterialfv接受向量數(shù)組,而glMaterialf只接受一個(gè)向量。第一個(gè)參數(shù)指定那個(gè)面被更新,在opengl es中只可以使用GL_FRONT_AND_BACK,其他參數(shù)不起作用。之所以存在這個(gè)參數(shù),是因?yàn)閛pengl可以設(shè)置多個(gè)參數(shù)。
第二個(gè)參數(shù)指定光源的類型,GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION 和 GL_AMBIENT_AND_DIFFUSE. 
最后一個(gè)參數(shù)指定一個(gè)數(shù)組或單個(gè)值,取決于你使用的哪個(gè)函數(shù)。

下一行設(shè)置面的材質(zhì)屬性:
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmbient);
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiffuse);

燈光的設(shè)置和材質(zhì)的設(shè)置相同,使用glLightfv或glLightf函數(shù):
    glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);

init函數(shù)沒有發(fā)生改變:    
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepthf(1.0f);

    glVertexPointer(3, GL_FLOAT, 0, box);
    glEnableClientState(GL_VERTEX_ARRAY);

    glEnable(GL_CULL_FACE);
    glShadeModel(GL_SMOOTH);
}

display函數(shù)的開頭部分沒有發(fā)生改變:
void display()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glLoadIdentity();

   gluLookAtf(
        0.0f, 0.0f, 3.0f,
        0.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f);

   glRotatef(xrot, 1.0f, 0.0f, 0.0f);
   glRotatef(yrot, 0.0f, 1.0f, 0.0f);

前面我們討論了法線,法線是垂直于面的,所以前平面的法線是(0, 0, 1),后平面的法線是(0, 0, -1),兩個(gè)法線的長度為1,所以不用再單位化。
法線由glNormal3f 函數(shù)指定,并在渲染時(shí)調(diào)用。這個(gè)函數(shù)由3個(gè)float類型的數(shù)據(jù)組成單位化的向量。
   // FRONT AND BACK
   glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
   glNormal3f(0.0f, 0.0f, 1.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
   glNormal3f(0.0f, 0.0f, -1.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);
   
   其他頁面設(shè)置也同上,

   // LEFT AND RIGHT
   glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
   glNormal3f(-1.0f, 0.0f, 0.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);
   glNormal3f(1.0f, 0.0f, 0.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 12, 4);

   // TOP AND BOTTOM
   glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
   glNormal3f(0.0f, 1.0f, 0.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 16, 4);
   glNormal3f(0.0f, -1.0f, 0.0f);
   glDrawArrays(GL_TRIANGLE_STRIP, 20, 4);

   glFlush();
   glutSwapBuffers();
}

最后菜單增加一項(xiàng)彩色材質(zhì),這項(xiàng)選擇打開或關(guān)閉色彩跟蹤。色彩跟蹤根據(jù)當(dāng)前面的色彩反色不同色的光。

    case 2 : 
        if (glIsEnabled(GL_COLOR_MATERIAL))
            glDisable(GL_COLOR_MATERIAL);
        else
            glEnable(GL_COLOR_MATERIAL);
        break;

下面兩張圖是程序的運(yùn)行結(jié)果,分別是普通燈光和色彩追蹤的效果。
   普通燈光         色彩跟蹤
15-Lighting.gif

   15-Lighting01.jpg



現(xiàn)在學(xué)會(huì)了在場景中添加燈光,它提供了靈活的設(shè)置,使得場景更加真實(shí)。

posted on 2011-01-10 18:39 大龍 閱讀(1839) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品在线视频| 国产精品qvod| 亚洲一级在线观看| 一区二区三区欧美亚洲| 一区二区三区免费网站| 亚洲图片自拍偷拍| 性做久久久久久久免费看| 欧美一区二区三区的| 欧美在线观看网址综合| 久久久国产一区二区| 美女999久久久精品视频| 亚洲国产一区二区三区在线播| 麻豆成人在线| 亚洲国产日韩一区| 久久久亚洲国产天美传媒修理工| 久久精品国产欧美亚洲人人爽| 美女久久一区| 日韩视频在线观看国产| 亚洲一区黄色| 麻豆精品一区二区av白丝在线| 欧美日韩大片| 国内精品久久久久影院优| 亚洲乱码国产乱码精品精| 国产午夜精品福利| 亚洲精品乱码久久久久久按摩观| 一区二区三区蜜桃网| 久久成人国产精品| 亚洲精品一品区二品区三品区| 亚洲砖区区免费| 欧美ed2k| 国产综合在线看| 亚洲一区观看| 欧美成年人视频网站| 亚洲私拍自拍| 欧美男人的天堂| 伊人狠狠色j香婷婷综合| 亚洲一区精品在线| 亚洲国产激情| 久久久久国产免费免费| 国产精品日韩久久久| 日韩亚洲欧美高清| 免费视频亚洲| 欧美在线黄色| 亚洲一区二区三区中文字幕在线| 蘑菇福利视频一区播放| 国产欧美一区二区视频| 亚洲少妇中出一区| 91久久午夜| 欧美r片在线| 亚洲高清在线观看| 久久久精品动漫| 亚洲欧美日本国产专区一区| 欧美日韩国产综合久久| 国产精品免费视频观看| 亚洲久久一区| 欧美国产第二页| 久久久久这里只有精品| 国产亚洲午夜| 欧美在线视频网站| 亚洲一二区在线| 欧美色精品天天在线观看视频 | 欧美激情亚洲激情| 亚洲国产中文字幕在线观看| 久久婷婷国产综合国色天香| 午夜视频久久久久久| 一本色道久久综合一区| 亚洲激情欧美激情| 欧美大片专区| 99国内精品久久久久久久软件| 欧美成人高清视频| 久久综合伊人77777| 亚洲国产精品999| 亚洲激情婷婷| 欧美日韩一区二区视频在线 | 亚洲高清视频在线观看| 欧美成人免费在线| 久久久久在线| 亚洲精品日韩在线观看| 日韩亚洲视频| 国产日韩欧美精品| 欧美成人精品不卡视频在线观看 | 狠狠干成人综合网| 免费在线欧美黄色| 欧美激情综合五月色丁香小说| 日韩一级精品视频在线观看| 一本一道久久综合狠狠老精东影业 | 欧美成人免费网| 欧美日韩亚洲免费| 欧美一区2区视频在线观看| 午夜视频一区| 亚洲精品影院在线观看| 亚洲影院在线| 亚洲国产精品精华液网站| 99国产成+人+综合+亚洲欧美| 国产欧美日韩免费| 亚洲国产精品va在看黑人| 国产精品久久久一区二区| 久久综合导航| 国产精品久久777777毛茸茸| 老司机午夜精品视频在线观看| 欧美区二区三区| 久久综合久久综合久久综合| 欧美日韩国产黄| 久久综合久久综合这里只有精品| 欧美日韩国产精品专区| 美女图片一区二区| 国产精品国产馆在线真实露脸| 麻豆成人av| 国产欧美在线播放| 一本色道久久综合狠狠躁篇怎么玩| 黄色成人av网| 欧美jizz19性欧美| 国产三级欧美三级日产三级99| 亚洲日本一区二区| 亚洲电影观看| 欧美伊人久久久久久久久影院 | 国产视频久久久久久久| 欧美肥婆在线| 国产精品女人久久久久久| 欧美国产日韩免费| 国产主播喷水一区二区| 亚洲一区免费视频| av成人国产| 欧美精品情趣视频| 欧美福利视频一区| 国产最新精品精品你懂的| 亚洲性线免费观看视频成熟| 亚洲三级色网| 免费观看欧美在线视频的网站| 久久精视频免费在线久久完整在线看| 欧美日韩综合不卡| 亚洲精品在线免费观看视频| 91久久中文字幕| 麻豆亚洲精品| 欧美激情一区二区三区在线| 亚洲黄色精品| 欧美激情亚洲| 亚洲无线视频| 欧美在线网址| 韩国一区电影| 久久综合成人精品亚洲另类欧美| 久久免费国产| 亚洲区一区二| 国产精品美女久久久久久免费 | 欧美日韩精品一区二区天天拍小说| 亚洲精品一二| 欧美亚洲在线播放| 国产一区久久| 欧美成年人视频网站| 亚洲精品一区二区三区99| 亚洲小视频在线观看| 国产精品视频免费| 久久久国产一区二区三区| 亚洲国产精品久久久久婷婷884| 日韩小视频在线观看专区| 欧美性大战久久久久| 欧美一区二区三区在线观看| 久久亚洲一区二区| 日韩亚洲在线观看| 国产精品中文字幕欧美| 久久久人成影片一区二区三区观看 | 久久夜色精品亚洲噜噜国产mv| 欧美sm极限捆绑bd| 亚洲国产精彩中文乱码av在线播放 | 夜夜狂射影院欧美极品| 欧美日韩精品免费观看| 欧美一区二区成人6969| 久久精品人人| 亚洲视频欧美视频| 国产精品欧美久久久久无广告| 一区二区冒白浆视频| 一区在线免费| 国产精品v片在线观看不卡| 亚洲一区免费看| 免播放器亚洲一区| 亚洲激情图片小说视频| 一区二区三区视频在线看| 欧美日本精品| 久久综合亚州| 亚洲午夜精品福利| 国产日韩一区在线| 久热精品视频在线免费观看| 亚洲性人人天天夜夜摸| 久久久久国色av免费看影院| 一区二区三区自拍| 欧美日韩国产精品一卡| 久久综合999| 一区二区三区精品在线| 久久五月激情| 99精品国产在热久久| 在线观看欧美日韩国产| 欧美日韩国产区一| 久久国产66| 亚洲国产精品黑人久久久| 亚洲在线免费| 亚洲经典一区| 国产亚洲欧美激情| 国产欧美韩国高清| 欧美精品日韩精品| 久久久噜噜噜久久|