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

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評(píng)論

opengl es 燈光

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

燈光

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

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

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

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

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

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

材質(zhì)

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

法線

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

另一個(gè)需要注意的一點(diǎn)是,法線要單位化,我們不會(huì)深入數(shù)學(xué)計(jì)算,這不是我們這章的目的。如果需要會(huì)在將來(lái)某章中講解。簡(jiǎn)明的說(shuō),一個(gè)向量的長(zhǎng)度等于各個(gè)向量分量的平方和的平方根,再把每個(gè)向量的分量除以這個(gè)值。現(xiàn)在不需要過(guò)多擔(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ì)在場(chǎng)景中起作用。
glEnable(GL_LIGHTING);

opengl最多允許8個(gè)光源,要使用某個(gè)光源,需要使用glEnable打開(kāi)它,光源的編號(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ù)沒(méi)有發(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ù)的開(kāi)頭部分沒(méi)有發(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è)法線的長(zhǎng)度為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);
   
   其他頁(yè)面設(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)選擇打開(kāi)或關(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ì)了在場(chǎng)景中添加燈光,它提供了靈活的設(shè)置,使得場(chǎng)景更加真實(shí)。

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            国产精品一二三四| 亚洲手机在线| 激情成人在线视频| 亚洲在线视频网站| 亚洲男女毛片无遮挡| 亚洲欧洲av一区二区| 国产亚洲电影| 欧美日韩国产色综合一二三四| 性欧美18~19sex高清播放| 久久视频国产精品免费视频在线| 欧美国产日韩一区二区三区| 久久国产精品久久久久久电车| 亚洲美女91| 在线亚洲伦理| 亚洲欧美视频一区| 一区二区日韩伦理片| 99av国产精品欲麻豆| 一区二区三区精品视频在线观看| 国产精品久久国产精品99gif | 久久久精品日韩欧美| 久久久噜噜噜久久中文字幕色伊伊| 欧美在线视频播放| 久久噜噜噜精品国产亚洲综合| 欧美成年人网| 国产精品私房写真福利视频| 国产亚洲欧美日韩一区二区| 136国产福利精品导航网址应用| 日韩天堂av| 一区二区三区视频在线看| 午夜精品视频在线观看| 久久一区激情| 亚洲美女精品久久| 欧美一级电影久久| 欧美精品一区二区三区视频| 国产精品久久国产三级国电话系列 | 亚洲色诱最新| 久久亚洲国产精品一区二区 | 最新热久久免费视频| 久久精品视频一| 久久久夜精品| 一区二区欧美亚洲| 久久综合九色九九| 国产精品一区二区三区久久久| 亚洲激情在线观看| 久久国产手机看片| 99视频+国产日韩欧美| 久久精品一区二区三区中文字幕| 欧美大秀在线观看| 国产精品国产三级国产专区53| 精品69视频一区二区三区| 亚洲图色在线| 亚洲第一黄色网| 亚洲小说欧美另类社区| 午夜精品久久久久久99热软件| 欧美激情亚洲另类| 久久精品亚洲一区二区三区浴池| 欧美午夜久久| 亚洲一区二区三区四区中文 | 久久久久国产精品人| 国产精品免费视频xxxx| 一区二区毛片| 一本色道久久88精品综合| 欧美成人dvd在线视频| 在线观看视频日韩| 欧美 日韩 国产精品免费观看| 香蕉乱码成人久久天堂爱免费 | 亚洲日本理论电影| 一区二区日韩欧美| 欧美日韩成人一区二区三区| 国产精品高清免费在线观看| 在线观看成人av| 欧美freesex交免费视频| 亚洲精品久久久久久久久久久久久| 欧美成人精品激情在线观看| 欧美黄色日本| 亚洲在线1234| 亚洲视频在线观看视频| 国产精品高潮呻吟久久| aⅴ色国产欧美| 午夜精品www| 久久精品亚洲精品国产欧美kt∨| 亚洲免费一级电影| 免费在线看成人av| 亚洲欧美色婷婷| 亚洲专区欧美专区| 欧美日韩在线播放三区| 亚洲欧美精品在线观看| 亚洲激情av在线| 99成人精品| 久久精品二区| 亚洲一区二区三| 夜夜嗨av色综合久久久综合网| 国产日韩亚洲| 中文日韩电影网站| 在线一区二区三区四区五区| 国产精品高潮久久| 亚洲国产精品久久久久婷婷老年| 夜夜精品视频| 久久婷婷人人澡人人喊人人爽| 亚洲免费不卡| 亚洲第一页在线| 欧美日韩国产一区二区| 亚洲久色影视| 亚洲黄色av| 久久久999精品免费| 亚洲开发第一视频在线播放| 久久在线免费观看| 久久精品国产成人| 国产亚洲欧美另类一区二区三区| 猛干欧美女孩| 欧美国产精品va在线观看| 亚洲精品久久久久久久久久久久| 亚洲图片在线观看| 亚洲视频1区| 亚洲一区网站| 最新亚洲电影| 国产精品99久久久久久久久| 日韩视频在线免费观看| 男人的天堂亚洲| 欧美亚洲网站| 免费人成精品欧美精品| 久久精品一区二区| 欧美在线影院| 欧美激情网友自拍| 欧美一区二区三区啪啪| 国产小视频国产精品| 欧美一级在线视频| 国产婷婷一区二区| 亚洲国产欧美不卡在线观看| 欧美一区二区成人| 欧美国产精品| 亚洲欧美日韩在线播放| 久久久久久综合网天天| 欧美专区日韩视频| 欧美激情国产日韩精品一区18| 亚洲国产精品久久久久婷婷老年 | 国产精品稀缺呦系列在线| 99热这里只有精品8| 欧美激情精品久久久| 亚洲一区高清| 亚洲欧美网站| 久久夜色精品亚洲噜噜国产mv| 欧美亚韩一区| 在线亚洲自拍| 最新国产の精品合集bt伙计| aa国产精品| 亚洲综合电影| 午夜精品亚洲一区二区三区嫩草| 久久一区二区视频| 99亚洲伊人久久精品影院红桃| 国产精品久久久久久久久久久久| 亚洲乱码久久| 亚洲黄色大片| 欧美va天堂在线| 亚洲黄色高清| 亚洲欧美在线x视频| 最新中文字幕亚洲| 亚洲欧美日韩在线综合| 亚洲免费观看高清完整版在线观看熊| 亚洲综合成人婷婷小说| 欧美激情中文字幕一区二区| 小处雏高清一区二区三区| 午夜宅男久久久| 久久尤物视频| 宅男66日本亚洲欧美视频| 一区二区三区成人| 国产精品一区免费视频| 亚洲精品国产精品国自产观看浪潮| 亚洲日本在线观看| 99热在这里有精品免费| 国产精品久久久久久福利一牛影视| 久久国产一二区| 亚洲天天影视| 亚洲伊人观看| 一本色道久久综合狠狠躁的推荐| 欧美呦呦网站| 亚洲福利在线看| 亚洲激情影院| 欧美日韩精品高清| 亚洲视频在线观看免费| 美女啪啪无遮挡免费久久网站| 精品av久久707| 欧美成人午夜激情| 一本大道av伊人久久综合| 久久中文字幕导航| 久久夜色精品国产欧美乱| 亚洲国产精品久久久久| 99视频超级精品| 好吊一区二区三区| 欧美国产精品中文字幕| 一区二区三区视频在线| 久久精品首页| 欧美一区=区| 久久网站热最新地址| 久久综合九九| 亚洲一二三级电影| 亚洲精品一区二区三区在线观看| 欧美有码在线观看视频| 亚洲日本成人| 国产精品视频xxxx|