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

  C++博客 :: 首頁 :: 聯系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402521
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

球體環境映射是一個創建快速金屬反射效果的方法,但它并不像真實世界里那么精確!我們從18課的代碼開始來創建這個教程,教你如何創建這種效果。
在我們開始之間,看一下紅寶書中的介紹。它定義球體環境映射為一幅位于無限遠的圖像,把它映射到球面上。

在Photoshop中創建一幅球體環境映射圖。

首先,你需要一幅球體環境映射圖,用來把它映射到球體上。在Photoshop中打開一幅圖并選擇所有的像素,創建它的一個復制。
接著,我們把圖像變為2的冪次方大小,一般為128x128或256x256。
最后使用扭曲(distort)濾鏡,并應用球體效果。然后把它保存為*.bmp文件。

我們并沒有添加任何全局變量,只是把紋理組的大小變為6,以保存6幅紋理。

 
  

GLuint texture[6];        // 保存6幅紋理

  
 下面我們要做的就是載入這些紋理 
  

int LoadGLTextures()        
{
 int Status=FALSE;       

 AUX_RGBImageRec *TextureImage[2];      // 創建紋理的保存空間

 memset(TextureImage,0,sizeof(void *)*2);                // 清空為0

 // 載入*.bmp圖像
 if ((TextureImage[0]=LoadBMP("Data/BG.bmp")) &&    // 背景圖
  (TextureImage[1]=LoadBMP("Data/Reflect.bmp")))   // 反射圖(球形紋理圖)
 {
  Status=TRUE;       

  glGenTextures(6, &texture[0]);     // 創建6個紋理

  for (int loop=0; loop<=1; loop++)
  {
   // 創建臨近點過濾紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop]);   // 創建紋理0和1
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
   glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY,
    0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);

   // 創建線形過濾紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop+2]);  // 創建紋理2,3
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
   glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY,
    0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);

   // 創建線形Mipmap紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop+4]);  // 創建紋理4,5
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
   gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY,
    GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);
  }
  for (loop=0; loop<=1; loop++)
  {
         if (TextureImage[loop])      // 如果圖像存在則清除
      {
           if (TextureImage[loop]->data)   
        {
             free(TextureImage[loop]->data); 
     }
     free(TextureImage[loop]);  
   }
  }
 }

 return Status;    
}

  
 我們對立方體的繪制代碼做了一些小的改動,把法線的范圍從[-1,1]縮放到[-0.5,0.5]。如果法向量太大的話,會產生一些塊狀效果,影響視覺效果。 
  

GLvoid glDrawCube()
{
  glBegin(GL_QUADS);
  // 前面
  glNormal3f( 0.0f, 0.0f, 0.5f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
  // 背面
  glNormal3f( 0.0f, 0.0f,-0.5f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  // 上面
  glNormal3f( 0.0f, 0.5f, 0.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
  // 下面
  glNormal3f( 0.0f,-0.5f, 0.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
  // 右面
  glNormal3f( 0.5f, 0.0f, 0.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
  // 左面
  glNormal3f(-0.5f, 0.0f, 0.0f);
  glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
 glEnd();
}

  
 在初始化OpenGL中,我們添加一些新的函數來使用球體紋理映射。
下面的代碼讓OpenGL自動為我們計算使用球體映射時,頂點的紋理坐標。 
  

 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);   // 設置s方向的紋理自動生成
 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);   // 設置t方向的紋理自動生成
  
 我們幾乎完成了所有的工作!接下來要做的就是就是繪制渲染,我刪除了一些二次幾何體,因為它們的視覺效果并不好。當然我們需要OpenGL為這些幾何體自動生成坐標,接著選擇球體映射紋理并繪制幾何體。最后把OpenGL狀態設置正常模式。 
  

int DrawGLScene(GLvoid)
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   
 glLoadIdentity();       // 重置視口

 glTranslatef(0.0f,0.0f,z);

 glEnable(GL_TEXTURE_GEN_S);      // 自動生成s方向紋理坐標
 glEnable(GL_TEXTURE_GEN_T);      // 自動生成t方向紋理坐標

 glBindTexture(GL_TEXTURE_2D, texture[filter+(filter+1)]);  // 綁定紋理
 glPushMatrix();
 glRotatef(xrot,1.0f,0.0f,0.0f);
 glRotatef(yrot,0.0f,1.0f,0.0f);
 switch(object)
 {
 case 0:
  glDrawCube();
  break;
 case 1:
  glTranslatef(0.0f,0.0f,-1.5f);     // 創建圓柱
  gluCylinder(quadratic,1.0f,1.0f,3.0f,32,32);   
  break;
 case 2:
  gluSphere(quadratic,1.3f,32,32);     // 創建球
  break;
 case 3:
  glTranslatef(0.0f,0.0f,-1.5f);     // 創建圓錐
  gluCylinder(quadratic,1.0f,0.0f,3.0f,32,32);   
  break;
 };

 glPopMatrix();
 glDisable(GL_TEXTURE_GEN_S);      // 禁止自動生成紋理坐標
 glDisable(GL_TEXTURE_GEN_T);     

 xrot+=xspeed;
 yrot+=yspeed;
 return TRUE;        // 成功返回
}

  
 最后我們使用空格來切換各個不同的幾何體 
  

    if (keys[' '] && !sp)
    {
     sp=TRUE;
     object++;
     if(object>3)
      object=0;
    }

  
 我們成功了!現在你可以使用環境映射紋理做一些非常棒的特效了。我想做一個立方體環境映射的例子,但我現在的顯卡不支持這種特效,所以只有等到以后了。

謝謝,并祝你好運!

 

posted on 2007-12-18 11:50 sdfasdf 閱讀(1078) 評論(0)  編輯 收藏 引用 所屬分類: OPENGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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电影| 黄色欧美日韩| 亚洲视频观看| 亚洲免费精品| 久久综合一区二区| 久久青草欧美一区二区三区| 亚洲一级片在线看| 亚洲欧美在线一区| 亚洲一区二区三区欧美| 亚洲天堂网站在线观看视频| 一区二区三区高清| 亚洲网友自拍| 久久久女女女女999久久| 玖玖精品视频| 亚洲欧洲另类| 亚洲精品少妇30p| 亚洲午夜在线观看| 欧美亚洲免费电影| 久久亚洲一区| 国产精品劲爆视频| 狠狠色丁香婷婷综合久久片| 欧美丰满少妇xxxbbb| 噜噜噜久久亚洲精品国产品小说| 老色批av在线精品| 亚洲日本在线视频观看| 亚洲午夜高清视频| 久久大逼视频| 欧美视频久久| 亚洲精品国偷自产在线99热| 欧美大片一区二区| 久久久久久久网| 亚洲视频在线免费观看| 久久先锋影音| 欧美在线观看天堂一区二区三区| 欧美韩日高清| 一区二区高清在线| 亚洲美女在线视频| 欧美日韩免费观看一区=区三区| 亚洲日本va午夜在线电影| 欧美www视频| 免费不卡在线观看av| 亚洲国语精品自产拍在线观看| 久久久女女女女999久久| 亚洲免费在线| 一区精品在线播放| 久久久久高清| 欧美成人一区二区三区在线观看| 亚洲精品中文字幕女同| 玖玖精品视频| 亚洲一区二区综合| 欧美一区在线直播| 美女黄色成人网| 蜜桃久久av一区| 亚洲国产一区二区三区在线播 | 亚洲人成在线免费观看| 欧美日韩性视频在线| 欧美日韩在线视频一区二区| 欧美另类专区| 欧美日韩综合不卡| 欧美另类高清视频在线| 欧美日韩亚洲激情| 欧美黑人多人双交| 狠狠综合久久| 先锋亚洲精品| 一区二区高清视频| 欧美日韩中文字幕在线| 一区二区三区精密机械公司| 欧美激情一区二区| 欧美高清在线视频观看不卡| 影音国产精品| 亚洲国产精品第一区二区| 久久久高清一区二区三区| 亚洲电影免费观看高清完整版在线| 久久久久在线| 男人插女人欧美| 久久久噜久噜久久综合| 欧美电影免费网站| 久久欧美中文字幕| 国产欧美另类| 一区二区国产日产| 一本色道婷婷久久欧美| 欧美激情一区二区三区成人| 伊人精品在线| 亚洲无线视频| 亚洲午夜在线观看| 一区二区精品在线| 欧美一区二区视频网站| 国产私拍一区| 亚洲综合视频一区| 亚洲专区免费| 欧美成人高清| 欧美激情一区二区三区高清视频 | 亚洲高清视频一区| 久久综合伊人77777| 亚洲国产一区二区a毛片| 99热在这里有精品免费| 欧美成人精品高清在线播放| 亚洲欧洲另类| 欧美中文字幕第一页| 久久综合久久久| 亚洲国产精品999| 亚洲国产裸拍裸体视频在线观看乱了中文 | 在线视频欧美精品| 欧美好吊妞视频| 亚洲欧美日韩精品综合在线观看| 久久精品动漫| 亚洲精品在线看| 激情婷婷久久| 国产欧美日本| 欧美三级电影一区| 欧美日韩免费高清| 亚洲欧美日韩国产中文| 午夜亚洲性色福利视频| 国产精品一区一区| 欧美一级一区| 国产精品一区二区欧美| 欧美在线综合视频| 这里只有精品视频在线| 免费视频久久| 久久综合99re88久久爱| 久久国产毛片| 久久深夜福利| 久久一区二区三区超碰国产精品| 日韩视频一区二区三区在线播放免费观看| 欧美日韩在线观看视频| 久久精品视频导航| 欧美在线观看www| 亚洲激情成人在线| 欧美在线播放高清精品| 亚洲免费福利视频| 亚洲黄色一区| 亚洲第一精品夜夜躁人人爽| 国产精品免费区二区三区观看| 久久久久国产一区二区三区四区| 一区二区三区色| 亚洲视频在线观看视频| 亚洲美女尤物影院| 一区二区三区黄色| 亚洲摸下面视频| 欧美成人福利视频| 国产精品一区二区久久久久| 伊人久久大香线| 国产精品久久久久久久免费软件| 欧美日韩国产在线看| 欧美日韩国产色视频| 欧美午夜精品久久久久久超碰| 欧美日韩调教| 国产视频久久网| 在线日韩成人| 亚洲影视中文字幕| 美女任你摸久久| 一本色道久久综合| 欧美国产精品v| 亚洲国产日韩精品| 久久美女性网| 亚洲桃花岛网站| 午夜亚洲福利在线老司机| 欧美亚洲综合在线| 欧美国产激情二区三区| 亚洲一级二级| 蜜桃视频一区| 极品日韩av| 欧美中文字幕| 亚洲深夜福利网站| 欧美精品自拍| 亚洲婷婷国产精品电影人久久| 亚洲国产99| 欧美精选午夜久久久乱码6080| 日韩一本二本av| 一区二区三区免费观看| 国产日韩一区欧美| 久久久久www| 欧美一区二区视频在线| 欧美国产亚洲精品久久久8v| 在线精品亚洲一区二区| 久久天堂成人| 久久亚洲国产精品日日av夜夜| 韩国女主播一区二区三区| 噜噜噜在线观看免费视频日韩| 久久精品99国产精品日本| 国产一区二区三区自拍 | 日韩视频三区| 国产一区二区日韩精品| 久久久久综合网| 久久资源av| 亚洲精品视频在线播放| 欧美成人情趣视频| 欧美性猛交一区二区三区精品| 亚洲主播在线观看| 欧美成人精精品一区二区频| 一区二区三区视频在线| 欧美亚洲在线播放| 欧美在线视频一区二区三区| 亚洲区免费影片| 国产日韩欧美一区二区| 男女激情视频一区| 欧美日韩免费在线视频| 久久狠狠婷婷| 久久久久88色偷偷免费| 欧美日韩视频在线观看一区二区三区 |