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

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

OpenGL學習筆記【10】——移動光源,光照小結

今天學習了移動光源,奉上源代碼:
#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};            //光源移動位置。

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

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

    glPushMatrix();        
//壓縮矩陣,設定光源的位置
    glDisable(GL_LIGHTING);    
    glRotatef(yRot, 
010);    //光源的旋轉
    glTranslatef(light_change[0],light_change[1],light_change[2]);    //光源的位置
    glTranslatef(light_position[0], light_position[1],light_position[2]);    //光源位置
    
    glutSolidSphere(
0.14,4);//利用庫函數繪制一個半徑為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();        
//光源設置完畢

    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);//利用庫函數繪制一個半徑為1的球體。
    glPopMatrix();            //彈出矩陣。

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


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

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

}


//當窗口大小改變時,會調用這個函數
void reshape(GLsizei w,GLsizei h)
{
    
//這里小說明一下:矩陣模式是不同的,他們各自有一個矩陣。投影相關
    
//只能用投影矩陣。(只是目前情況下哦,等我學多了可能就知道為什么了。)

    glViewport(
0,0,w,h);        //設置視口
    glMatrixMode(GL_PROJECTION);    //設置矩陣模式為投影變換矩陣,
    glLoadIdentity();                //變為單位矩陣
    gluPerspective(60, (GLfloat)w / h, 01000);    //設置投影矩陣
    
//glOrtho(-6.0, 6.0, -6.0 * h / w, 6.0* h / w, -10, 10);    //為了不變形,則要長和寬成比例
    glMatrixMode(GL_MODELVIEW);        //設置矩陣模式為視圖矩陣(模型)
    glLoadIdentity();                //變為單位矩陣
}


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


//閑置函數,當主循環空閑時就會調用這個函數
void MyIdle(void)
{
    unsigned 
int nNow = ::GetTickCount();
    
float delt = nNow - nPre;
    
if (delt >  100)
    
{
        nPre 
= nNow;
        yRot 
+= 0.1 * delt;    //旋轉角度
        /*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); //設置顯示模式為雙緩沖,RGEBA

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

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

posted on 2009-05-03 14:57 shongbee2 閱讀(7306) 評論(4)  編輯 收藏 引用 所屬分類: OpenGL

評論

# re: OpenGL學習筆記【10】——移動光源,光照小結 2009-05-05 19:46 yanjun

還是讀一下紅寶書好些
會讓你忽然開朗  回復  更多評論   

# re: OpenGL學習筆記【10】——移動光源,光照小結 2009-05-05 19:54 yanjun

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

# re: OpenGL學習筆記【10】——移動光源,光照小結 2009-05-08 23:57 shongbee2

@yanjun
哦,謝謝推薦。呵呵,,我也是馬上打算看這本書。不過還沒有找到呵呵。
  回復  更多評論   

# re: OpenGL學習筆記【10】——移動光源,光照小結 2011-11-15 09:08 cghy2011

不錯  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品v欧美精品v日韩| 午夜视频在线观看一区二区三区| 午夜精品久久久久久久白皮肤| 欧美chengren| 亚洲国产日韩综合一区| 久久精品一区二区三区不卡牛牛| 亚洲一区二区三区在线| 亚洲男女毛片无遮挡| 亚洲一区二区三区涩| 性欧美video另类hd性玩具| 亚洲香蕉视频| 欧美日韩精品一区二区三区四区| 你懂的视频一区二区| 欧美大尺度在线观看| 欧美大片一区二区三区| 亚洲国产精品免费| 一区二区激情视频| 久久精品99国产精品酒店日本| 久久精品国产视频| 欧美激情视频一区二区三区免费 | 久久精品欧美日韩精品| 韩国免费一区| 欧美吻胸吃奶大尺度电影| 蜜臀a∨国产成人精品| 久久久久久久久久码影片| 国产精品视频99| 久久久国产精品一区二区三区| 欧美中文在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲小少妇裸体bbw| 亚洲一区二区三区在线观看视频| 欧美日韩高清在线播放| 亚洲男女毛片无遮挡| 欧美成人黄色小视频| 国产一区二区三区的电影 | 在线中文字幕日韩| 老司机一区二区三区| 日韩视频精品在线观看| 欧美资源在线| 久久嫩草精品久久久久| 亚洲一区二区在线免费观看视频 | 久久九九久精品国产免费直播| 亚洲激情另类| 欧美激情第一页xxx| 亚洲素人一区二区| 一本久久综合| 国产一区二区三区无遮挡| 久久漫画官网| 久久人人爽国产| 亚洲国产岛国毛片在线| 亚洲精品久久久久久久久久久| 欧美精品v日韩精品v韩国精品v| 99热在这里有精品免费| 亚洲国产成人高清精品| 国产精品久久福利| 美女黄毛**国产精品啪啪| 欧美国产免费| 欧美在线免费观看视频| 欧美激情综合| 久久亚洲一区二区| 欧美色欧美亚洲另类七区| 久久久女女女女999久久| 欧美日韩国产二区| 美国十次成人| 国产人成一区二区三区影院| 亚洲国产精品尤物yw在线观看 | 亚洲免费高清| 一区二区三区亚洲| 亚洲尤物在线| 亚洲欧美中日韩| 欧美日韩三区| 亚洲日本中文字幕区| 最新国产拍偷乱拍精品| 欧美一级播放| 久久久久久久久久久久久女国产乱 | 久久精品欧美日韩精品| 欧美日韩精品在线观看| 亚洲电影欧美电影有声小说| 国产主播精品在线| 性色一区二区| 蜜臀a∨国产成人精品| 黑丝一区二区| 久久人人爽国产| 亚洲国产小视频| 夜色激情一区二区| 欧美日韩日日骚| 欧美成熟视频| 亚洲第一区色| 欧美精品一区视频| 一区二区三区回区在观看免费视频| 99精品欧美一区二区三区| 欧美视频三区在线播放| 欧美一区二区三区精品电影| 麻豆精品国产91久久久久久| 亚洲精选视频在线| 国产啪精品视频| 欧美精品一区二区三区蜜桃| 亚洲一级免费视频| 免费黄网站欧美| 亚洲专区一二三| 91久久国产综合久久蜜月精品| 欧美日韩国产麻豆| 久久久久免费观看| 一区二区三区成人| 极品日韩av| 国产精品久久久久久影视| 久久视频在线看| 久久se精品一区精品二区| 亚洲日本va午夜在线影院| 久久久久久久激情视频| 亚洲欧美一区二区在线观看| 91久久精品国产91性色| 狠狠色丁香久久婷婷综合丁香| 欧美日韩免费高清| 欧美日韩伊人| 欧美日韩国产综合久久| 欧美美女bbbb| 国产精品色午夜在线观看| 欧美日韩亚洲一区二区三区四区| 亚洲欧美日韩久久精品| 91久久国产综合久久蜜月精品 | 亚洲专区国产精品| 亚洲一二三四久久| 香蕉久久一区二区不卡无毒影院 | 欧美激情网站在线观看| 另类专区欧美制服同性| 欧美成人dvd在线视频| 亚洲狠狠婷婷| 亚洲欧美bt| 久久偷看各类wc女厕嘘嘘偷窃| 久久午夜国产精品| 久久精品在这里| 亚洲激情婷婷| 亚洲一区日韩在线| 久久综合久久88| 欧美日韩国内| 久久精品国产一区二区三 | 欧美一级理论性理论a| 久久久久久久国产| 一区二区三区精密机械公司 | 久久久亚洲一区| 欧美日韩精品在线观看| 在线播放亚洲一区| 欧美综合二区| 亚洲午夜精品福利| 免费欧美视频| 亚洲第一伊人| 欧美+日本+国产+在线a∨观看| 亚洲综合色激情五月| 你懂的视频欧美| 黄网站色欧美视频| 久久久噜噜噜久久人人看| 亚洲另类一区二区| 欧美成人情趣视频| 亚洲国产成人高清精品| 久久亚洲欧美国产精品乐播| 亚洲欧美综合另类中字| 欧美午夜在线观看| 中文av字幕一区| 这里只有精品视频在线| 国产精品亚洲综合久久| 欧美在线视频a| 免费高清在线一区| 亚洲激情视频在线播放| 欧美1区免费| 国产精品成人一区二区三区吃奶| 亚洲激情网址| 一本色道精品久久一区二区三区 | 久久精品1区| 亚洲精华国产欧美| 日韩午夜在线播放| 国产丝袜一区二区| 欧美大秀在线观看| 国产精品欧美久久| 麻豆精品视频在线观看视频| 亚洲激情影视| 国产日韩欧美一区| 欧美激情一区二区三区| 国产精品拍天天在线| 欧美v国产在线一区二区三区| 欧美视频在线一区二区三区| 欧美一区二区三区久久精品| 免播放器亚洲| 欧美一区二区精品久久911| 欧美一二三区精品| 亚洲成人在线观看视频| 亚洲欧洲在线一区| 国产欧美日韩一区二区三区| 免费视频最近日韩| 欧美日本一区二区高清播放视频| 亚洲一区二区三区三| 久久久久久久久久久久久久一区| 在线精品福利| 亚洲欧美综合v| 亚洲一区二区三区免费观看 | 在线精品福利| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产美女精品视频| 一二三区精品福利视频| 亚洲免费婷婷|