• <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>

            隨感而發(fā)

            雜七雜八

            統(tǒng)計(jì)

            留言簿(13)

            閱讀排行榜

            評(píng)論排行榜

            OpenGL學(xué)習(xí)筆記【8】——顏色材質(zhì)

            今天學(xué)習(xí)了顏色材質(zhì):奉上源代碼:

            #pragma comment(lib, "glaux.lib")
            #include 
            "gl\glaux.h"
            #include 
            <gl\glut.h>
            float yRot = 0;
            unsigned 
            int nPre = 0;
            void display(void)
            {
                glClear(GL_COLOR_BUFFER_BIT 
            | GL_DEPTH_BUFFER_BIT);    // 清楚顏色數(shù)據(jù)和深度數(shù)據(jù)(清屏)
                glColor3f(1.0,1.0,1.0);
                glLoadIdentity();        
            //初始變換矩陣為單位矩陣

                GLfloat no_mat[] 
            = {0.00.00.01.0};
                GLfloat mat_ambient[] 
            = {1.01.01.01.0};
                GLfloat mat_diffuse[] 
            = {1.00.00.01.0};
                GLfloat mat_specular[] 
            =  {1.01.01.01.0};
                GLfloat no_shininess[] 
            = {0.0};
                GLfloat low_shininess[] 
            = {5.0};
                GLfloat hig_shininess[] 
            = {100.0};
                GLfloat mat_emission[] 
            = {0.3,0.80.01.0};



                glPushMatrix();            
            //壓入變換矩陣那

                
            //材質(zhì)設(shè)置有效一直保持到改變?yōu)橹埂?/span>
                glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
                glMaterialfv(GL_FRONT, GL_SHININESS, hig_shininess);
                glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
                glColorMaterial(GL_FRONT,GL_DIFFUSE);    
            //最開始顏色材質(zhì)對(duì)應(yīng)的是ambient的。所以要給為diffuse
                glColor4f(0,0,0,1);        
                glEnable(GL_COLOR_MATERIAL);        
            //啟動(dòng)顏色材質(zhì)


                glPushMatrix();
                glTranslatef(
            -3.753.00.0);    //第一個(gè)球的位置    
                glColorMaterial(GL_FRONT, GL_SHININESS);    //這個(gè)事無(wú)效的
                glColor4f(0.00.01.01.0);        //顏色材質(zhì)為藍(lán)色
                glutSolidSphere(130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
                glPopMatrix();            //彈出矩陣。

                glPushMatrix();
                glTranslatef(
            -1.253.00.0);
                glColor4f(
            1.00.01.01.0);    //顏色材質(zhì)為紫色

                glutSolidSphere(
            130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
                glPopMatrix();

                glPushMatrix();        
                glTranslatef(
            1.253.00.0);
                glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);    
            //用設(shè)置矩陣堆棧的方式來(lái)用材質(zhì),發(fā)現(xiàn)他以顏色材質(zhì)為準(zhǔn)。
                glutSolidSphere(130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
                glPopMatrix();

                
            //第一行第三列繪制的球有漫反射光和鏡面光,并有很亮的高光,而無(wú)環(huán)境光 
                glPushMatrix();
                glTranslatef(
            1.250.00.0);
                glDisable(GL_COLOR_MATERIAL);        
            //禁用顏色材質(zhì)之后,就可以用堆棧方式了。
                glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
                glutSolidSphere(
            130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
                glPopMatrix();

                glPushMatrix();        
            //這里會(huì)沿用以前的設(shè)置的材質(zhì)。
                glTranslatef(3.750.00.0);
                glutSolidSphere(
            130,30);//利用庫(kù)函數(shù)繪制一個(gè)半徑為1的球體。
                glPopMatrix();

                glPopMatrix();

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


            //初始化
            void init (void
            {
                glClearColor (
            0.50.50.50.0);    //清理顏色,為黑色,(也可認(rèn)為是背景顏色)


                GLfloat light_diffuse[]
            = 1.01.01.01.0};//藍(lán)色        //有燈光才能體現(xiàn)材質(zhì)的效果,他的燈光的強(qiáng)度是與的關(guān)系。貌似是兩個(gè)相乘什么的。(0-1)范圍。
                GLfloat light_position[] = 032.00.0 };        //設(shè)置點(diǎn)光源的矩陣,這個(gè)向量也忒奇怪了,1不跟著變,0跟著變,設(shè)置為透視之后又是1跟著變,0不跟著變。
                GLfloat light_specular[] = 1.01.01.01.0 };        //反射光
                GLfloat light_ambient[] = {0.50.50.51.0};

                glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
                glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);        
            //,漫射光會(huì)產(chǎn)生漫射的效果和高光的效果
                glLightfv(GL_LIGHT0, GL_POSITION, light_position);    //點(diǎn)光源沒(méi)有漫射光的效果,會(huì)一直是黑色的。但會(huì)有高光反射的效果。
                glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);        //反射光基本沒(méi)有效果。可能是我不知道吧

                glEnable(GL_LIGHTING);
                glEnable(GL_LIGHT0);    
            //如果什么都不設(shè)置,GL_LIGHT有默認(rèn)的值。
                glCullFace(GL_BACK);
                glEnable(GL_CULL_FACE);
                glDepthFunc(GL_LEQUAL);    
                glEnable(GL_DEPTH_TEST);
            }


            //當(dāng)窗口大小改變時(shí),會(huì)調(diào)用這個(gè)函數(shù)
            void reshape(GLsizei w,GLsizei h)
            {
                glViewport(
            0,0,w,h);        //設(shè)置視口
                glMatrixMode(GL_PROJECTION);    //設(shè)置矩陣模式為投影變換矩陣,
                glLoadIdentity();                //變?yōu)閱挝痪仃?br>    //gluPerspective(60, (GLfloat)w / h, 0, 1000);    //設(shè)置投影矩陣
                glOrtho(-6.06.0-6.0 * h / w, 6.0* h / w, -1010);    //為了不變形,則要長(zhǎng)和寬成比例
                glMatrixMode(GL_MODELVIEW);        //設(shè)置矩陣模式為視圖矩陣(模型)
                glLoadIdentity();                //變?yōu)閱挝痪仃?/span>
            }


            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)
                glutMainLoop();                            //主循環(huán)。
                return 0;  
            }

             

            他和矩陣堆棧的材質(zhì)不同,他是通過(guò)設(shè)置改變材質(zhì)的什么屬性,然后通過(guò)顏色來(lái)設(shè)置材質(zhì)的,書上說(shuō)他的效率要高一點(diǎn)。
            相關(guān)函數(shù);
            glEnable(GL_COLOR_MATERIAL);  //啟動(dòng)顏色材質(zhì), 允許使用顏色材質(zhì)。啟動(dòng)之后我們才能通過(guò)顏色來(lái)設(shè)置材質(zhì)。
            glDisable(GL_COLOR_MATERIAL);  //禁用顏色材質(zhì),禁用之后就不用顏色材質(zhì)了。這樣可以減小開銷。
            glColorMaterial(GL_FRONT,GL_DIFFUSE); 設(shè)置顏色改變哪個(gè)材質(zhì)屬性,和設(shè)置材質(zhì)是差不多的,只是少了一個(gè)參數(shù)。第一個(gè)是材質(zhì)面,第二個(gè)是材質(zhì)類型枚舉:環(huán)境光,漫反射等材質(zhì)類型。
            設(shè)置了之后我們通過(guò)
            glColor4f(0,0,0,1); 來(lái)更改對(duì)應(yīng)材質(zhì)類型的材質(zhì)了。
            學(xué)習(xí)心得:
            3.1使用顏色材質(zhì)的優(yōu)先級(jí)要比使用矩陣的高,也就是說(shuō)使用了顏色材質(zhì)設(shè)置之后,你的矩陣材質(zhì)就會(huì)失效。
            如果你沒(méi)有設(shè)置對(duì)應(yīng)的顏色材質(zhì),他才會(huì)去看是矩陣材質(zhì)。所以一定程度上矩陣材質(zhì)和顏色材質(zhì)可以共存。他也會(huì)保存上一次的材質(zhì)信息。及時(shí)你disable之后再enable,也會(huì)保存。所以要注意。
            3.2開始使用glEnable(GL_COLOR_MATERIAL)的時(shí)候,改變顏色改變的是ambient材質(zhì)。但是你定位改變材質(zhì)類型之后,無(wú)論你多少次的disable和enable都是改變上次定位的材質(zhì)屬性。
            3.3 glColorMaterial.設(shè)置顏色材質(zhì)類型只能使有顏色的類型,例如漫反射,輻射,環(huán)境光,反射等,對(duì)于高光這種不是顏色中設(shè)置不可以的。

            posted on 2009-05-01 23:48 shongbee2 閱讀(3678) 評(píng)論(1)  編輯 收藏 引用 所屬分類: OpenGL

            評(píng)論

            # re: OpenGL學(xué)習(xí)筆記【8】——顏色材質(zhì) 2009-12-16 15:51 allen

            博主,可否加我msn,有些問(wèn)題請(qǐng)教一下。
            allen_huang128@hotmail.com  回復(fù)  更多評(píng)論   

            精品久久久久中文字幕日本| 色88久久久久高潮综合影院| 久久无码AV一区二区三区| 99久久免费国产精品热| 中文无码久久精品| 久久午夜免费视频| 亚洲AⅤ优女AV综合久久久| 91精品国产综合久久四虎久久无码一级 | 国产精品久久毛片完整版| 亚洲国产成人精品无码久久久久久综合| 久久男人Av资源网站无码软件| 色青青草原桃花久久综合| 久久综合伊人77777| 人妻少妇精品久久| 久久精品综合网| 亚洲AV无码成人网站久久精品大| 久久无码AV一区二区三区| 伊人情人综合成人久久网小说| 亚洲欧美日韩久久精品| 久久精品国产清自在天天线| 亚洲成色WWW久久网站| 久久香综合精品久久伊人| 97久久国产露脸精品国产| 97精品国产91久久久久久| 99久久精品免费观看国产| 久久热这里只有精品在线观看| 久久香综合精品久久伊人| 97久久综合精品久久久综合| 久久精品成人免费国产片小草| 亚洲国产婷婷香蕉久久久久久| 日本久久久久久久久久| 亚洲精品第一综合99久久| 久久精品国产免费一区| 中文字幕日本人妻久久久免费 | 久久九九兔免费精品6| 久久无码AV中文出轨人妻| 国产亚州精品女人久久久久久 | 久久伊人五月丁香狠狠色| 国产成人综合久久久久久| 久久99精品久久久久久hb无码| 国产香蕉久久精品综合网|