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

  C++博客 :: 首頁(yè) :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 402860
  • 排名 - 59

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

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

在Photoshop中創(chuàng)建一幅球體環(huán)境映射圖。

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

我們并沒(méi)有添加任何全局變量,只是把紋理組的大小變?yōu)?,以保存6幅紋理。

 
  

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

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

int LoadGLTextures()        
{
 int Status=FALSE;       

 AUX_RGBImageRec *TextureImage[2];      // 創(chuàng)建紋理的保存空間

 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]);     // 創(chuàng)建6個(gè)紋理

  for (int loop=0; loop<=1; loop++)
  {
   // 創(chuàng)建臨近點(diǎn)過(guò)濾紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop]);   // 創(chuàng)建紋理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);

   // 創(chuàng)建線形過(guò)濾紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop+2]);  // 創(chuàng)建紋理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);

   // 創(chuàng)建線形Mipmap紋理圖
   glBindTexture(GL_TEXTURE_2D, texture[loop+4]);  // 創(chuàng)建紋理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;    
}

  
 我們對(duì)立方體的繪制代碼做了一些小的改動(dòng),把法線的范圍從[-1,1]縮放到[-0.5,0.5]。如果法向量太大的話,會(huì)產(chǎn)生一些塊狀效果,影響視覺(jué)效果。 
  

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中,我們添加一些新的函數(shù)來(lái)使用球體紋理映射。
下面的代碼讓OpenGL自動(dòng)為我們計(jì)算使用球體映射時(shí),頂點(diǎn)的紋理坐標(biāo)。 
  

 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);   // 設(shè)置s方向的紋理自動(dòng)生成
 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);   // 設(shè)置t方向的紋理自動(dòng)生成
  
 我們幾乎完成了所有的工作!接下來(lái)要做的就是就是繪制渲染,我刪除了一些二次幾何體,因?yàn)樗鼈兊囊曈X(jué)效果并不好。當(dāng)然我們需要OpenGL為這些幾何體自動(dòng)生成坐標(biāo),接著選擇球體映射紋理并繪制幾何體。最后把OpenGL狀態(tài)設(shè)置正常模式。 
  

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

 glTranslatef(0.0f,0.0f,z);

 glEnable(GL_TEXTURE_GEN_S);      // 自動(dòng)生成s方向紋理坐標(biāo)
 glEnable(GL_TEXTURE_GEN_T);      // 自動(dòng)生成t方向紋理坐標(biāo)

 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);     // 創(chuàng)建圓柱
  gluCylinder(quadratic,1.0f,1.0f,3.0f,32,32);   
  break;
 case 2:
  gluSphere(quadratic,1.3f,32,32);     // 創(chuàng)建球
  break;
 case 3:
  glTranslatef(0.0f,0.0f,-1.5f);     // 創(chuàng)建圓錐
  gluCylinder(quadratic,1.0f,0.0f,3.0f,32,32);   
  break;
 };

 glPopMatrix();
 glDisable(GL_TEXTURE_GEN_S);      // 禁止自動(dòng)生成紋理坐標(biāo)
 glDisable(GL_TEXTURE_GEN_T);     

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

  
 最后我們使用空格來(lái)切換各個(gè)不同的幾何體 
  

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

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

謝謝,并祝你好運(yùn)!

 

posted on 2007-12-18 11:50 sdfasdf 閱讀(1080) 評(píng)論(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>
            亚洲自拍电影| 欧美精品乱人伦久久久久久 | 亚洲精品免费一二三区| 91久久精品一区二区三区| 免费av成人在线| 亚洲日本电影在线| 亚洲欧美在线免费| 尤物yw午夜国产精品视频明星| 免费一级欧美片在线播放| 亚洲精品视频二区| 欧美一级理论片| 一区二区自拍| 欧美日韩国产综合视频在线| 午夜国产精品视频免费体验区| 美日韩精品视频| 亚洲视频视频在线| 国产一区免费视频| 欧美精品日日鲁夜夜添| 亚洲欧美中文在线视频| 欧美国产综合一区二区| 亚洲欧美激情一区二区| 在线不卡亚洲| 国产精品女人毛片| 欧美 日韩 国产 一区| 亚洲夜间福利| 亚洲福利视频免费观看| 欧美一区激情| 一区二区三区成人| 一色屋精品视频在线看| 欧美性视频网站| 免费视频一区| 久久国产精品99国产精| 日韩一区二区精品视频| 欧美 日韩 国产 一区| 欧美亚洲日本网站| 日韩亚洲在线观看| 在线播放国产一区中文字幕剧情欧美| 欧美肉体xxxx裸体137大胆| 久久婷婷影院| 亚洲欧美区自拍先锋| 99精品欧美一区| 欧美国产精品人人做人人爱| 久久精品国产一区二区电影| 亚洲视频图片小说| 亚洲日韩第九十九页| 影音先锋亚洲视频| 国产日韩亚洲| 国产精品乱码| 国产精品videossex久久发布| 欧美国产精品久久| 久久综合99re88久久爱| 久久国产欧美日韩精品| 亚洲欧美国产高清| 亚洲网站在线| 在线亚洲自拍| 一区二区三区日韩欧美精品| 亚洲人成小说网站色在线| 亚洲大胆视频| 欧美激情在线免费观看| 欧美大片免费久久精品三p | 欧美第十八页| 免费观看国产成人| 老色鬼精品视频在线观看播放| 久久都是精品| 久久精品国产综合精品| 久久精品国产一区二区三区免费看 | 国产精品国产三级国产普通话蜜臀| 欧美激情1区2区| 欧美精品日韩一区| 欧美日韩成人在线观看| 欧美日韩久久久久久| 欧美精品免费观看二区| 欧美日韩国产麻豆| 欧美午夜激情小视频| 欧美午夜在线一二页| 国产精品一区二区视频| 国产欧美日韩视频一区二区三区| 国产日韩av一区二区| 国产色综合久久| 一区二区三区我不卡| 亚洲福利在线视频| 日韩亚洲视频| 亚洲欧美成人综合| 久久精品首页| 欧美成人高清视频| 亚洲福利视频免费观看| 日韩一级网站| 午夜欧美大尺度福利影院在线看| 久久精品国产96久久久香蕉| 久久综合999| 欧美精品在线观看播放| 国产精品久线观看视频| 国产一区二区三区在线播放免费观看 | 在线看片成人| 一区二区三区日韩精品| 欧美一区二区三区在线| 猛干欧美女孩| 夜夜嗨av一区二区三区免费区| 亚洲欧美激情视频| 久久久福利视频| 欧美日韩大片| 国产一区二区三区久久 | 亚洲欧洲日本在线| 亚洲网在线观看| 久久国产婷婷国产香蕉| 亚洲福利国产精品| 亚洲淫片在线视频| 另类图片国产| 国产精品剧情在线亚洲| 亚洲国产精品毛片| 亚洲欧美综合另类中字| 美女图片一区二区| 中文国产成人精品| 玖玖国产精品视频| 国产精品天美传媒入口| 亚洲激情视频网| 久久国产精品99精品国产| 亚洲国产成人精品视频| 亚洲女人天堂成人av在线| 你懂的视频欧美| 国产婷婷色一区二区三区在线| 亚洲每日在线| 六十路精品视频| 亚洲自拍高清| 欧美精品午夜视频| 一区一区视频| 欧美一区二区日韩| 亚洲麻豆国产自偷在线| 久久免费一区| 国产一区二区日韩精品欧美精品| 一区二区久久久久久| 欧美成人免费小视频| 午夜视频一区| 欧美午夜a级限制福利片| 亚洲人成网站色ww在线| 久久婷婷丁香| 欧美一级专区免费大片| 欧美亚男人的天堂| 99国产精品久久久久久久久久| 久久夜色精品| 欧美亚洲免费在线| 欧美午夜免费影院| 一区二区av在线| 亚洲第一区色| 免费成人黄色片| 一区二区亚洲精品| 久久女同精品一区二区| 午夜久久久久久| 国产欧美精品在线播放| 亚洲永久在线| 中文日韩在线视频| 欧美视频1区| 亚洲一区www| 亚洲视频在线观看一区| 欧美视频在线免费| 亚洲一区二区动漫| 99精品国产一区二区青青牛奶| 欧美激情精品久久久六区热门| 亚洲三级国产| 最新日韩在线| 欧美日韩精品福利| 亚洲视频在线一区观看| 日韩亚洲精品在线| 欧美日韩中文字幕精品| 亚洲一区二区三区久久| 一区二区三区高清不卡| 国产精品免费看久久久香蕉| 先锋影音网一区二区| 亚洲欧美在线播放| 国内精品嫩模av私拍在线观看| 久久一区精品| 欧美77777| 99精品国产福利在线观看免费| 亚洲欧洲综合另类| 欧美日韩综合久久| 亚洲欧美影院| 久久国产视频网| 91久久一区二区| 亚洲久久在线| 国产精品私房写真福利视频| 久久久97精品| 免费成人小视频| 中文精品视频| 欧美在线免费观看亚洲| 亚洲国产经典视频| 亚洲精品美女| 国产嫩草一区二区三区在线观看 | 亚洲制服丝袜在线| 国产一区二区三区高清播放| 欧美承认网站| 欧美网站在线观看| 久久男女视频| 欧美精品福利视频| 欧美一区2区三区4区公司二百| 久久夜色精品亚洲噜噜国产mv| 一区二区三区高清不卡| 久久成人18免费观看| 日韩小视频在线观看| 亚洲女同在线| 亚洲理伦在线|