<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      xiaxiwan

      導航

      OpenGL下實現圖片滿屏顯示

      轉自:http://blog.csdn.net/dizuo/article/details/7596242

      實現圖片滿屏顯示,最常用的用途是把一張圖片作為顯示窗體的背景圖片。我這里有總兩種方法:

       一、 正交模式顯示背景圖片

       

      1. 關閉深度測試
      2. 正交投影
      3. 設置四邊形的尺寸為窗口四個角,將圖片貼到Quad上
      4. 切換到透視模式下
      5. 開啟深度測試
      6. 顯示三維場景

       

      繪制背景圖片時必須關閉深度測試,否則會導致后面渲染的3d場景不能顯示。 

      在繪制3d場景時開啟深度測試是為了保證3D模型繪制的正確性,主要指彼此的遮擋關系。

      示例代碼:

       1 void display(void)  
       2 {  
       3     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  
       4     glColor3f (1.0, 1.0, 1.0);    
       5     
       6     glDisable(GL_DEPTH_TEST);  
       7   
       8     // 切換到正交模式  
       9     glMatrixMode(GL_PROJECTION);    
      10     glLoadIdentity();    
      11     glOrtho(0, g_fWidth, 0, g_fHeight, 0, g_fDepth);    
      12     glMatrixMode(GL_MODELVIEW);    
      13     glLoadIdentity();    
      14       
      15     glDisable(GL_LIGHTING);  
      16     glEnable(GL_TEXTURE_2D);  
      17     glBindTexture( GL_TEXTURE_2D, g_textureID );  
      18     glInterleavedArrays( GL_T2F_V3F, 0, g_bgVertices );  
      19     glDrawArrays( GL_QUADS, 0, 4 ); // 繪制背景圖片  
      20     glEnable(GL_LIGHTING);  
      21     glDisable(GL_TEXTURE_2D);  
      22   
      23     //  切換到三維場景  
      24     glMatrixMode (GL_PROJECTION);       //回復原有的設置    
      25     glLoadIdentity ();    
      26     gluPerspective(30, g_fWidth/g_fHeight, 0.001, 100.0);  
      27     glMatrixMode(GL_MODELVIEW);  
      28     glLoadIdentity ();               
      29     gluLookAt(0, 5, 5, 0, 0, 0, 0, 1, 0);  
      30   
      31     glEnable(GL_DEPTH_TEST);  
      32   
      33     glPushMatrix();  
      34     {  
      35         glTranslatef(0, 0, 0);  
      36   
      37         glRotatef(g_xAngle, 1, 0, 0);  
      38         glRotatef(g_yAngle, 0, 1, 0);  
      39   
      40         glCallList(g_modelId);  // 繪制三維圖形  
      41     } glPopMatrix();  
      42   
      43     glFlush();  
      44     // glutPostRedisplay();  
      45 }  

       二、 透視模式顯示背景圖片

      背景圖片和3d場景都在透視模式下顯示,此時為了精確實現圖片滿屏,需要將窗口四個角的坐標投影到3d場景中,計算出對應的四邊形四個角坐標,然后圖片貼上去。步驟如下:
      1. 窗口四角 投影到3d場景中,使用gluUnProject函數 計算出新的quad
      2. 關閉深度測試
      3. 繪制quad,貼圖
      4. 開啟深度測試
      5. 繪制3d場景

      示例代碼:

       1 void display(void)  
       2 {  
       3     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  
       4     glColor3f (1.0, 1.0, 1.0);    
       5   
       6     ComputeBackgroundQuad();  
       7   
       8     glDisable(GL_DEPTH_TEST);  
       9   
      10     // 繪制背景圖片  
      11     glDisable(GL_LIGHTING);  
      12     glEnable(GL_TEXTURE_2D);  
      13     glBindTexture( GL_TEXTURE_2D, g_textureID );  
      14   
      15     glEnableClientState( GL_VERTEX_ARRAY );  
      16     glEnableClientState( GL_TEXTURE_COORD_ARRAY );  
      17     glInterleavedArrays( GL_T2F_V3F, 0, g_bgVertices );  
      18     glDrawArrays( GL_QUADS, 0, 4 );  
      19     glDisableClientState( GL_VERTEX_ARRAY );  
      20     glDisableClientState( GL_TEXTURE_COORD_ARRAY );  
      21   
      22     glDisable(GL_TEXTURE_2D);  
      23   
      24     glEnable(GL_LIGHTING);  
      25   
      26     glEnable(GL_DEPTH_TEST);  
      27   
      28     glPushMatrix();  
      29     {  
      30         glTranslatef(0, 0, g_fOffset);  
      31   
      32         glRotatef(g_xAngle, 1, 0, 0);  
      33         glRotatef(g_yAngle, 0, 1, 0);  
      34   
      35         glCallList(g_modelId);  
      36     } glPopMatrix();  
      37   
      38     glFlush();  
      39     // glutPostRedisplay();  
      40 }
       1 void ComputeBackgroundQuad()  
       2 {  
       3     GLint   viewport[4];  
       4     GLdouble projMatrix[16];  
       5     GLdouble modelMatrix[16];  
       6   
       7     // glGetDoublev(GL_PROJECTION, projMatrix);  缺少matrix但是編譯不報錯~  
       8     glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);  
       9     glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);  
      10     glGetIntegerv(GL_VIEWPORT, viewport);  
      11   
      12     //   
      13     double objX, objY, objZ;  
      14     const double winZ = 0;  // 0 / 1  
      15     gluUnProject(0, 0, winZ, modelMatrix, projMatrix, viewport, &objX, &objY, &objZ);  
      16     g_bgVertices[0].x = objX;  
      17     g_bgVertices[0].y = objY;  
      18     g_bgVertices[0].z = objZ;  
      19   
      20     gluUnProject(g_fWidth, 0, winZ, modelMatrix, projMatrix, viewport, &objX, &objY, &objZ);  
      21     g_bgVertices[1].x = objX;  
      22     g_bgVertices[1].y = objY;  
      23     g_bgVertices[1].z = objZ;  
      24   
      25     gluUnProject(g_fWidth, g_fHeight, winZ, modelMatrix, projMatrix, viewport, &objX, &objY, &objZ);  
      26     g_bgVertices[2].x = objX;  
      27     g_bgVertices[2].y = objY;  
      28     g_bgVertices[2].z = objZ;  
      29   
      30     gluUnProject(0, g_fHeight, winZ, modelMatrix, projMatrix, viewport, &objX, &objY, &objZ);  
      31     g_bgVertices[3].x = objX;  
      32     g_bgVertices[3].y = objY;  
      33     g_bgVertices[3].z = objZ;  
      34 }  

      最終的效果如圖:

       

      posted on 2012-11-13 19:47  xiaxiwan  閱讀(1685)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲人成电影在线天堂色| 日韩av无码一区二区三区| 国产精品成人中文字幕| 醴陵市| 伊人久久大香线蕉av色婷婷色| 中文字幕成人精品久久不卡| 日韩精品人妻中文字幕| 亚洲午夜av一区二区| 久久久久青草线蕉亚洲| 男女做aj视频免费的网站| 狠狠爱五月丁香亚洲综| 亚洲va久久久噜噜噜久久狠狠| 中文字幕日本一区二区在线观看| 亚洲一区二区视频在线观看| 97视频精品全国免费观看| 精品国产一区二区三区香| 色窝窝免费一区二区三区| 日本高清视频网站www| 午夜夜福利一区二区三区| 国产综合内射日韩久| 天天澡天天揉揉av无码| 中文人妻av高清一区二区| 嘉义县| 91麻豆精品国产91久| 日韩中文字幕有码av| 亚洲一卡2卡三卡四卡精品| 国产麻豆精品手机在线观看| 国内精品人妻一区二区三区| 亚洲中文字幕在线观看| 久久96热人妻偷产精品| 国产一级三级三级在线视| 福利一区二区不卡国产| jizz视频在线观看| 少妇人妻偷人精品系列| 蜜桃成熟色综合久久av| www国产无套内射com| 精品无码久久久久久尤物| 久草国产视频| 日韩狼人精品在线观看| 日韩精品有码中文字幕| 少妇xxxxx性开放|