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

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

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402520
  • 排名 - 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>
            一区二区三区精密机械公司 | 老司机精品导航| 一本到高清视频免费精品| 亚洲电影免费观看高清完整版在线观看 | 国产精品国产a| 欧美巨乳波霸| 国产精品家教| 国产一区美女| 亚洲人成小说网站色在线| 亚洲精品国产精品久久清纯直播 | 欧美成人亚洲| 欧美黄色aaaa| 一道本一区二区| 亚洲欧美国产va在线影院| 久久国产精品亚洲77777| 久久天天躁狠狠躁夜夜av| 欧美不卡在线视频| 国产精品黄视频| 精品二区视频| 亚洲一区bb| 免费看亚洲片| 在线亚洲成人| 欧美11—12娇小xxxx| 国产精品vvv| 1024亚洲| 性色av一区二区三区在线观看| 乱码第一页成人| 国产精品99久久久久久白浆小说 | 久久伊人精品天天| 一区二区三区日韩精品| 国产欧美日韩亚洲精品| 最新国产拍偷乱拍精品 | 亚洲一区二区三区乱码aⅴ| 久久九九久精品国产免费直播| 欧美成人官网二区| 亚洲视屏在线播放| 欧美精品99| 激情欧美国产欧美| 亚洲欧美日韩一区在线| 亚洲成人直播| 一区二区三区av| 欧美国产免费| 精品不卡视频| 久久精品论坛| 亚洲欧美日韩另类| 欧美手机在线视频| 99在线视频精品| 亚洲成人资源网| 裸体歌舞表演一区二区 | 亚洲无限av看| 亚洲人体一区| 欧美裸体一区二区三区| 亚洲第一页中文字幕| 久久男人资源视频| 性欧美精品高清| 国产喷白浆一区二区三区| 亚洲欧美在线播放| 亚洲午夜极品| 国产精品毛片在线| 亚洲欧美在线视频观看| 99亚洲精品| 国产精品久久久久9999高清| 亚洲先锋成人| 中文国产亚洲喷潮| 国产精品白丝jk黑袜喷水| 一区二区三区色| 亚洲精品乱码视频| 欧美日韩中文字幕综合视频| 亚洲视频碰碰| 亚洲一区3d动漫同人无遮挡| 国产精品日韩精品欧美精品| 欧美影院一区| 久久国产精品一区二区三区| 韩国三级电影一区二区| 美日韩精品免费| 欧美aaa级| 亚洲香蕉在线观看| 亚洲欧美卡通另类91av | 久久久xxx| 猫咪成人在线观看| 正在播放亚洲一区| 亚洲综合久久久久| 国内揄拍国内精品久久| 欧美成人综合在线| 欧美日韩专区在线| 亚洲国产精品毛片| 国产精品欧美久久| 久久精品国产免费看久久精品| 久久精品国产第一区二区三区| 伊人激情综合| 亚洲精品网址在线观看| 国产欧美短视频| 欧美激情黄色片| 欧美日韩亚洲另类| 久久久久久国产精品一区| 蘑菇福利视频一区播放| 亚洲图片欧美午夜| 久久精品久久99精品久久| 日韩视频二区| 午夜久久久久久| 亚洲精选在线| 久久精品国产99| 国产精品99久久久久久宅男| 久久se精品一区精品二区| 日韩视频免费在线| 欧美尤物巨大精品爽| 宅男噜噜噜66国产日韩在线观看| 欧美在线免费| 亚洲尤物在线| 欧美国产精品人人做人人爱| 欧美在线视频不卡| 欧美日韩情趣电影| 欧美成人免费全部| 国产亚洲精品美女| 日韩视频一区| 亚洲免费观看| 久久夜色精品国产| 久久精品2019中文字幕| 国产精品白丝av嫩草影院| 最新亚洲一区| 亚洲高清精品中出| 欧美中文字幕在线视频| 午夜欧美大片免费观看| 欧美日本中文字幕| 亚洲国产合集| 亚洲第一区在线| 久久九九久精品国产免费直播| 午夜精品影院| 国产精品麻豆成人av电影艾秋 | 久久中文字幕一区| 国产欧美日韩激情| 亚洲一区三区视频在线观看| 亚洲午夜久久久| 欧美日韩免费一区| 亚洲精品在线一区二区| 亚洲美女啪啪| 欧美国产丝袜视频| 亚洲欧洲一区二区天堂久久| 亚洲精品国精品久久99热| 美女网站久久| 亚洲高清视频一区二区| 亚洲精品久久久久久一区二区| 久久综合网hezyo| 欧美黄色免费| 亚洲久久成人| 欧美性大战xxxxx久久久| 亚洲视频成人| 午夜国产欧美理论在线播放 | 欧美日韩国产高清视频| 欧美性猛交视频| 欧美高清视频一区二区三区在线观看 | 亚洲日韩中文字幕在线播放| 欧美gay视频激情| 亚洲国产三级网| 在线性视频日韩欧美| 欧美午夜国产| 欧美一级黄色网| 欧美成人中文| 一区二区三区久久久| 国产精品久久久久久久午夜| 午夜精品亚洲| 亚洲国产清纯| 欧美一区二区在线播放| 亚洲第一区在线| 国产精品www| 久久综合久久综合九色| 亚洲黄色小视频| 欧美在线观看网址综合| 亚洲国产精品福利| 国产精品久久久免费| 久久久久久久国产| 99综合在线| 欧美/亚洲一区| 亚洲一区999| 亚洲国产成人精品视频| 国产精品乱码一区二区三区| 免费成人美女女| 亚洲欧美视频一区二区三区| 亚洲高清视频的网址| 久久久久久久一区二区| av成人天堂| 在线成人激情视频| 国产精品影院在线观看| 欧美激情五月| 久久久久久一区二区| 亚洲一区二区三区视频| 91久久国产精品91久久性色| 久久精品国产精品| 亚洲综合精品四区| 亚洲精品一区二区三区樱花| 国产一区白浆| 国产精品免费一区二区三区在线观看| 玖玖玖国产精品| 欧美中文在线视频| 亚洲天堂av高清| 亚洲美女在线看| 最新国产成人在线观看| 久久婷婷蜜乳一本欲蜜臀| 欧美亚洲在线| 午夜国产精品视频|