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

隨感而發(fā)

雜七雜八

統(tǒng)計(jì)

留言簿(13)

閱讀排行榜

評(píng)論排行榜

OpenGL學(xué)習(xí)筆記【10】——移動(dòng)光源,光照小結(jié)

今天學(xué)習(xí)了移動(dòng)光源,奉上源代碼:
#pragma comment(lib, "glaux.lib")
#include 
"gl\glaux.h"
#include 
<gl\glut.h>

float yRot = 0;
unsigned 
int nPre = 0;
GLfloat light_position[
4= {0,0,0,1};        //光位置
GLfloat light_diffuse[4= {1,0,1,1};        //光的漫反色
GLfloat light_direction[4= {-1-2-11};    //光源聚光燈方向
GLfloat light_change[3= {3,3,-1};            //光源移動(dòng)位置。

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT 
| GL_DEPTH_BUFFER_BIT);    // 清楚顏色數(shù)據(jù)和深度數(shù)據(jù)(清屏)
    glColor3f(1.0,1.0,1.0);    
    glLoadIdentity();        
//初始變換矩陣為單位矩陣

    glTranslated(
0,-1,-5);    //平移0,0,-5向Z負(fù)方向平移5個(gè)單位

    glPushMatrix();        
//壓縮矩陣,設(shè)定光源的位置
    glDisable(GL_LIGHTING);    
    glRotatef(yRot, 
010);    //光源的旋轉(zhuǎn)
    glTranslatef(light_change[0],light_change[1],light_change[2]);    //光源的位置
    glTranslatef(light_position[0], light_position[1],light_position[2]);    //光源位置
    
    glutSolidSphere(
0.14,4);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。表示光源在這里
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glPopMatrix();
    light_direction[
0= -light_change[0];
    light_direction[
1= -light_change[1];
    light_direction[
2= -light_change[2];
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_direction);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
    glPopMatrix();        
//光源設(shè)置完畢

    glPushMatrix();            
//要入矩陣,繪制地面
    glBegin(GL_QUADS);
    glVertex3f(
-3,0,3);
    glVertex3f(
3,0,3);
    glVertex3f(
3,0,-3);
    glVertex3f(
-3,0,-3);
    glEnd();
    glPopMatrix();            
//地面繪制完畢

    glPushMatrix();            
//壓入變換矩陣那
    glutSolidSphere(130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
    glPopMatrix();            //彈出矩陣。

    glutSwapBuffers();            
//交換緩沖區(qū)。顯示圖形
}


//初始化
void init (void
{
    
//srand(0);    隨機(jī)種子
    glClearColor (0.50.50.50.0);    //清理顏色,為黑色,(也可認(rèn)為是背景顏色)
    
    GLfloat light_param[] 
= 1111.0 };    //初始化光參數(shù)。
    
//glLightfv(GL_LIGHT0, GL_AMBIENT, light_param);    //設(shè)置光為環(huán)境光。
    
//glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); //設(shè)置聚光的范圍為45度。
    glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0);    //設(shè)置聚光燈的聚光強(qiáng)度。
    
    glMaterialfv(GL_FRONT, GL_SPECULAR, light_param);    
//設(shè)置材質(zhì)的漫反射屬性
    
//glMaterialfv(GL_FRONT, GL_AMBIENT, light_param);    //設(shè)置材質(zhì)的環(huán)境屬性
    glMaterialf(GL_FRONT, GL_SHININESS, 64);    //設(shè)置材質(zhì)的高光屬性
    

    glEnable(GL_LIGHTING);        
//啟動(dòng)光照
    glEnable(GL_LIGHT0);        //啟動(dòng)GL_LIGHTO光
    glCullFace(GL_BACK);        //剔除背面
    glEnable(GL_CULL_FACE);        //啟動(dòng)剔除
    glDepthFunc(GL_LEQUAL);        //深度檢測(cè)為小于等于
    glEnable(GL_DEPTH_TEST);    //啟動(dòng)深度檢測(cè)
    glFrontFace(GL_CCW);        //定義逆時(shí)針為正面

}


//當(dāng)窗口大小改變時(shí),會(huì)調(diào)用這個(gè)函數(shù)
void reshape(GLsizei w,GLsizei h)
{
    
//這里小說(shuō)明一下:矩陣模式是不同的,他們各自有一個(gè)矩陣。投影相關(guān)
    
//只能用投影矩陣。(只是目前情況下哦,等我學(xué)多了可能就知道為什么了。)

    glViewport(
0,0,w,h);        //設(shè)置視口
    glMatrixMode(GL_PROJECTION);    //設(shè)置矩陣模式為投影變換矩陣,
    glLoadIdentity();                //變?yōu)閱挝痪仃?/span>
    gluPerspective(60, (GLfloat)w / h, 01000);    //設(shè)置投影矩陣
    
//glOrtho(-6.0, 6.0, -6.0 * h / w, 6.0* h / w, -10, 10);    //為了不變形,則要長(zhǎng)和寬成比例
    glMatrixMode(GL_MODELVIEW);        //設(shè)置矩陣模式為視圖矩陣(模型)
    glLoadIdentity();                //變?yōu)閱挝痪仃?/span>
}


void Keyboard(unsigned char key, int x, int y)
{
}


//閑置函數(shù),當(dāng)主循環(huán)空閑時(shí)就會(huì)調(diào)用這個(gè)函數(shù)
void MyIdle(void)
{
    unsigned 
int nNow = ::GetTickCount();
    
float delt = nNow - nPre;
    
if (delt >  100)
    
{
        nPre 
= nNow;
        yRot 
+= 0.1 * delt;    //旋轉(zhuǎn)角度
        /*light_diffuse[0] = (rand() % 255) / 255.0;//太花不用了。
        light_diffuse[1] = (rand() % 255) / 255.0;
        light_diffuse[2] = (rand() % 255) / 255.0;
*/

        glutPostRedisplay();
    }

}


int main(int argc, char** argv)
{
    glutInit(
&argc, argv);        //Opnegl初始化
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA); //設(shè)置顯示模式為雙緩沖,RGEBA

    glutInitWindowSize (
800600);            //窗口大小
    glutInitWindowPosition (100100);        //窗口位置
    glutCreateWindow ("hello");                //創(chuàng)建一個(gè)標(biāo)題為hello的窗口
    init ();                                //初始化資源,這里一定要在創(chuàng)建窗口以后,不然會(huì)無(wú)效。
    glutDisplayFunc(display);                //窗口大小改變時(shí)的回調(diào)
    glutReshapeFunc(reshape);                //繪制圖形時(shí)的回調(diào)
    glutKeyboardFunc(Keyboard);
    glutIdleFunc(MyIdle);
    glutMainLoop();                            
//主循環(huán)。
    return 0;  
}

學(xué)習(xí)光源已經(jīng)好幾天,始終入不了門(mén)。不過(guò)這次學(xué)習(xí)移動(dòng)光源之后,有一點(diǎn)點(diǎn)感覺(jué)。函數(shù)的功能就不能介紹了。書(shū)上有,再次分享一下這本書(shū),下載鏈接為:
http://download.csdn.net/source/1247246
主要心得:
1.每個(gè)光源GL_LIGHT0--7都有相應(yīng)的環(huán)境光,點(diǎn)光源,聚光燈,漫射光等所有光的屬性,我們?cè)O(shè)置的屬性也只屬于這個(gè)光源。當(dāng)光源照射到物體上時(shí),OpenGL的函數(shù)會(huì)用這些所有的屬性與該物體做光照射的計(jì)算,實(shí)現(xiàn)光的效果。而沒(méi)有照射到得物體就不會(huì)計(jì)算。例如設(shè)置了環(huán)境光為[0.5,0.5,0.5,1.0],漫反射光為[1,0,1,1];如果照射到物體上,他會(huì)分別計(jì)算環(huán)境光的效果和漫射光的效果,然后再疊加他們的效果。疊加方式為取分量的最大值。若物體沒(méi)有被照射,則所有效果都不會(huì)被計(jì)算。也就是說(shuō)會(huì)呈現(xiàn)黑色。我開(kāi)始就沒(méi)有理解這些屬性關(guān)系,以為只要設(shè)置的環(huán)境光之后就能所有物體都能用了。其實(shí)不然,只有照射到得物體才會(huì)計(jì)算。如果想所有物體都有環(huán)境光,設(shè)置全局環(huán)境光才能達(dá)到這個(gè)效果。
2.什么時(shí)候計(jì)算光照,在物體繪制的時(shí)候光照效果會(huì)計(jì)算。他會(huì)把光照設(shè)置光源的屬性通過(guò)矩陣變換到該物體坐標(biāo)系中,然后在進(jìn)行光照計(jì)算。也就是他會(huì)跟著物體變化。例如:設(shè)置了一個(gè)點(diǎn)光源在這個(gè)物體的前方。如果是通過(guò)矩陣變換來(lái)改變物體的位置。那么光源會(huì)一直在該物體的前方,因?yàn)樗且晕矬w坐標(biāo)系參照的。所以這里要注意,并不是說(shuō)物體glTranslate(),glRotate()之后光照會(huì)發(fā)生變化。光的位置也會(huì)跟著變,使光照不變化。如果你想光源不隨著變化的話(huà),在設(shè)置光源位置的時(shí)候,就要反著變一下。在設(shè)置光源的時(shí)候,也可以用平移旋轉(zhuǎn)的能矩陣運(yùn)算。
3.兩個(gè)物體之間光照是否有影響:兩個(gè)物體光照不會(huì)有影響,也就是說(shuō)不會(huì)出現(xiàn)一個(gè)物體遮住另一個(gè)物體的情況。因?yàn)樗窃谝粋€(gè)物體的物體坐標(biāo)系中計(jì)算效果的,而且只對(duì)該物體計(jì)算效果。所以不會(huì)對(duì)其他物體產(chǎn)生影響,如果要真實(shí),就得自己算出陰影在繪制。我還沒(méi)有學(xué)會(huì)。呵呵。如果不想物體產(chǎn)生光照,就用glDisable(GL_LIGHTIING);就可以了。在繪制其他物體再啟動(dòng)他。
4.聚光燈:聚光燈我是沒(méi)有弄懂的,特別是他的方向,很暈很暈。感覺(jué)是向量,有感覺(jué)不像向量。到底怎么回事還得努力學(xué)習(xí),希望能碰到高手指點(diǎn)一下。
5.其他方面:
glFrontFace(GL_CW); 確定順時(shí)針為front面,默認(rèn)是GL_CCW既逆時(shí)針為正面。所以在繪制茶壺和球的時(shí)候會(huì)出問(wèn)題,在繪制一個(gè)矩形的時(shí)候也要注意這個(gè)問(wèn)題。

posted on 2009-05-03 14:57 shongbee2 閱讀(7314) 評(píng)論(4)  編輯 收藏 引用 所屬分類(lèi): OpenGL

評(píng)論

# re: OpenGL學(xué)習(xí)筆記【10】——移動(dòng)光源,光照小結(jié) 2009-05-05 19:46 yanjun

還是讀一下紅寶書(shū)好些
會(huì)讓你忽然開(kāi)朗  回復(fù)  更多評(píng)論   

# re: OpenGL學(xué)習(xí)筆記【10】——移動(dòng)光源,光照小結(jié) 2009-05-05 19:54 yanjun

.聚光燈
首先點(diǎn)光源下才計(jì)算的,position[]={x,y,z,w>0};
其次GL_SPOT_CUTOFF!=180,
再次GL_SPOT_CUTOFF<90(聚光)
90~180我把它說(shuō)成用一個(gè)板擋著一個(gè)spot_point
紅寶書(shū)上面講的很明白  回復(fù)  更多評(píng)論   

# re: OpenGL學(xué)習(xí)筆記【10】——移動(dòng)光源,光照小結(jié) 2009-05-08 23:57 shongbee2

@yanjun
哦,謝謝推薦。呵呵,,我也是馬上打算看這本書(shū)。不過(guò)還沒(méi)有找到呵呵。
  回復(fù)  更多評(píng)論   

# re: OpenGL學(xué)習(xí)筆記【10】——移動(dòng)光源,光照小結(jié) 2011-11-15 09:08 cghy2011

不錯(cuò)  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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一区| 久久久久一区| 蜜桃久久精品一区二区| 免费永久网站黄欧美| 欧美成人免费全部观看天天性色| 久久久久久久久久久久久女国产乱| 久久久亚洲影院你懂的| 久久亚洲免费| 亚洲国产精品一区二区久| 久久精品系列| 欧美国产在线视频| 日韩天堂在线观看| 亚洲欧美国产视频| 久热精品视频在线免费观看| 欧美精品亚洲精品| 国产乱码精品一区二区三区五月婷 | 亚洲精品黄网在线观看| aⅴ色国产欧美| 欧美一区二区三区日韩| 欧美 日韩 国产一区二区在线视频| 欧美韩日一区| 国内精品久久久久久久97牛牛| 精品999久久久| 一区二区三区日韩精品| 久久综合成人精品亚洲另类欧美| 欧美二区在线| 亚洲男人第一网站| 欧美成va人片在线观看| 国产精品久久激情| 美女成人午夜| 亚洲精品永久免费| 亚洲欧美日本视频在线观看| 久久精品一本| 国产精品久久久久久久久久三级 | 99re亚洲国产精品| 久久精品女人| 国产精品女主播一区二区三区| 国产亚洲va综合人人澡精品| 亚洲看片网站| 男女精品视频| 久久国产精彩视频| 国产精品日韩一区| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲一区二区三区四区中文 | 欧美sm视频| 国产中文一区| 亚洲欧美日韩成人高清在线一区| 亚洲第一黄色| 美女主播视频一区| 亚洲国产精品va在线观看黑人| 午夜精品久久久久99热蜜桃导演| 亚洲国产精品久久精品怡红院| 欧美综合国产精品久久丁香| 国产老女人精品毛片久久| 亚洲一区二区三区高清| 亚洲精品日本| 欧美日韩亚洲一区在线观看| 亚洲伦理一区| 亚洲国产精品一区二区www在线| 久久久亚洲国产天美传媒修理工 | 正在播放亚洲一区| 亚洲欧洲另类| 欧美精品午夜| 午夜精彩国产免费不卡不顿大片| 夜夜精品视频| 国产九区一区在线| 久久久久久69| 蜜臀av国产精品久久久久| 亚洲激情在线观看| 亚洲黄色小视频| 欧美日韩精品免费观看视频| 亚洲精品日日夜夜| 中国日韩欧美久久久久久久久| 欧美日韩精品欧美日韩精品| 午夜精品婷婷| 亚洲欧美日韩国产中文 | 日韩一区二区免费高清| 国产精品白丝黑袜喷水久久久| 午夜免费日韩视频| 久久精品一区二区三区不卡牛牛| 亚洲第一区在线观看| 亚洲国产精品成人综合色在线婷婷 | 亚洲色图自拍| 午夜精品影院| 亚洲经典三级| 亚洲一区二区三区欧美 | 亚洲欧美日韩天堂| 欧美一区二区三区免费大片| 伊人蜜桃色噜噜激情综合| 91久久国产综合久久| 国产精品国产成人国产三级| 久久久久国产精品麻豆ai换脸 | 国产日韩欧美a| 免费在线成人av| 欧美色欧美亚洲高清在线视频| 久久大逼视频| 欧美日本成人| 久久久久久久综合| 欧美理论大片| 久久综合电影| 欧美色精品在线视频| 亚洲承认在线| 国产视频欧美| 99伊人成综合| 亚洲二区在线观看| 亚洲制服少妇| 亚洲精品网站在线播放gif| 午夜精品亚洲| 亚洲一区二区三区精品在线| 久久综合色一综合色88| 午夜电影亚洲| 欧美三级第一页| 亚洲大胆女人| 精品96久久久久久中文字幕无| 亚洲美女免费视频| 在线欧美三区| 久久国产一区二区| 性高湖久久久久久久久| 欧美日韩dvd在线观看| 久久久久看片| 国产亚洲成av人在线观看导航| 亚洲免费高清视频| 亚洲精品裸体| 蜜桃伊人久久| 欧美激情国产日韩| 国产专区一区| 欧美在线视频一区二区| 欧美一区二区三区视频在线观看 | 中文亚洲免费| 亚洲国产精品久久久久久女王| 欧美激情久久久| 一区二区三区免费在线观看| 国产酒店精品激情| 亚洲第一级黄色片| 国产日韩欧美日韩| 欧美国产免费| 亚洲第一精品久久忘忧草社区| 亚洲一区区二区| 午夜久久99| 欧美三日本三级少妇三2023| 亚洲第一主播视频| 在线成人av网站| 久久在线91| 亚洲国产精品一区二区尤物区| 亚洲国产乱码最新视频| 久久久精品tv| 亚洲第一在线视频| 亚洲精品综合| 欧美日韩一区在线观看视频| 亚洲午夜av电影| 欧美一区二区在线观看| 国产伦精品一区二区三区照片91 | 亚洲午夜女主播在线直播| 欧美国产一区视频在线观看| 欧美激情自拍| av成人手机在线| 欧美新色视频| 亚洲一区二区三区四区五区黄| 亚洲欧美福利一区二区| 国产日韩在线视频| 看片网站欧美日韩| 欧美激情一区二区久久久| 亚洲麻豆国产自偷在线| 欧美日韩一级黄| 午夜精品久久久久久久| 久久免费精品视频| 日韩一级片网址| 国产精品乱码| 久久精品免费电影| 日韩视频免费在线| 久久精品夜夜夜夜久久| 亚洲毛片一区| 国产视频自拍一区| 免费h精品视频在线播放| 99精品视频免费观看| 久久久久国产精品一区| 亚洲色图综合久久| 在线观看日韩av电影| 欧美日韩mp4| 久久精品九九| 99国内精品| 免费中文日韩| 欧美一区二区成人6969| 在线日韩欧美| 国产精品日韩在线观看| 欧美freesex8一10精品| 欧美在线日韩| 亚洲视屏在线播放| 亚洲国产精品久久久久秋霞蜜臀| 午夜日韩在线观看| 欧美三日本三级少妇三2023| 久久综合色8888| 欧美精品在线观看播放| 欧美视频在线一区二区三区| 欧美一区二区精品| 日韩网站在线观看| 亚洲成在人线av| 欧美电影资源|