亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OpenGLES3.0之Texturing紋理詳解(二)

2019-11-14 17:57:58
字體:
來源:轉載
供稿:網友

  Texture Filtering and Mipmapping 紋理過濾與多級紋理

  前面我們已經講了單個2D圖像的2D紋理的介紹,這篇文章主要講解多級紋理。紋理坐標是用于生成一個2D索引,當放大和縮小設置為GL_NEAREST時,將發生一個單一紋理將匹配到紋理坐標位置中,這是一個最近點的采樣。

  當使用一個多級紋理時,我們可以設置過濾模式,,為了達到屏幕像素和紋理圖片像素更合適的比例,減少鋸齒。因為多級紋理貼圖的成功過濾,當在更遠處觀察時,我們向貼圖鏈后移動,鋸齒減少,實現高質量的圖像。

   

// Load mipmap level 0glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height,0, GL_RGB, GL_UNSIGNED_BYTE, pixels);level = 1;PRevImage = &pixels[0];while(width > 1 && height > 1){  int newWidth,  newHeight;  // Generate the next mipmap level  GenMipMap2D( prevImage, &newImage, width, height, &newWidth,  &newHeight);  // Load the mipmap level  glTexImage2D(GL_TEXTURE_2D, level, GL_RGB,  newWidth, newHeight, 0, GL_RGB,  GL_UNSIGNED_BYTE, newImage);  // Free the previous image  free(prevImage);  // Set the previous image for the next iteration  prevImage = newImage;  level++;  // Half the width and height  width = newWidth;  height = newHeight;}free(newlmage);

  GenMipMap2D用于用于實現多級紋理。紋理過濾有2種:放大和縮小。當屏幕上設計的多邊形的大小小于紋理圖像時,我們使用縮小紋理。反之使用放大。使用過濾類型由具體硬件自動選擇,但是API也提供了過濾控制,放大處理是不相關的,因為我們總是使用最大
可用的級別。對于縮小,有各種的采樣模式可以使用。哪種模式的使用選擇基于你需要實現的可視質量和你想要實現多大性能的紋理過濾來決定的。過濾模式使用glTexParameter[i|f][v]來指定。

  

  

  放大過濾可以是GL_NEAREST 或 GL_LINEAR。在GL_NEAREST 放大過濾模式,紋理最近的單點將做紋理坐標。在GL_LINEAR 模式,雙線性(四個點平均)作為紋理坐標。

  縮小過濾可以是下列值:

  •• GL_NEAREST—Takes a single point sample from the texture nearest to the texture coordinate.

  •• GL_LINEAR—Takes a bilinear sample from the texture nearest to the texture coordinate.

  •• GL_NEAREST_MIPMAP_NEAREST—Takes a single point sample from the closest mip level chosen.
  •• GL_NEAREST_MIPMAP_LINEAR—Takes a sample from the two closest mip levels and interpolates between those samples.
  •• GL_LINEAR_MIPMAP_NEAREST—Takes a bilinear fetch from the closest mip level chosen.
  •• GL_LINEAR_MIPMAP_LINEAR—Takes a bilinear fetch from each of the two closest mip levels and then interpolates between them. This last mode, which is typically referred to as trilinear filtering, produces the best quality of all modes.

  GL_NEAREST 和 GL_LINEAR 是唯一不需要完整多級紋理的縮小過濾模式,其他都需要完整的多級處理。

  

GL_NEAREST 和GL_LINEAR_MIPMAP_LINEAR的過濾設置。

  值得一提的是一些性能將影響你選擇的紋理過濾模式。對于大多數硬件來說,使用多級紋理是最好的選擇。

  Seamless Cubemap Filtering

  它是3.0新特性。當一個線性過濾核心在一個立方體紋理的邊框時,這個過濾只發生在線所在立方體的一面中。你不需要設置Seamless Cubemap Filtering,線性過濾會自動使用它。

  

  自動多級紋理生成

  前面我們已經創建了一個level為0的多級紋理,這是一種方法。另外也提供了自動多級紋理生成函數 glGenerateMipmap。

  

我們隊綁定的紋理對象調用glGenerateMipmap,它會為我們生成從原始圖像到level為0的多級紋理鏈。當你使用framebuffer對象時,自動多級紋理生成變得尤為重要。當渲染一個紋理時,我們不想將紋理讀回CPU中生成多級紋理。glGenerateMipmap可以解決這個問題。

 

  Texture Coordinate Wrapping

  當紋理坐標超過了范圍[0.0, 1.0] 時,使用紋理包裝來實現。紋理包裝模式使用glTexParameter[i|f][v]來指定。

  

  紋理包裝模式能被獨立的設定為s坐標和t坐標。GL_TEXTURE_WRAP_S模式定義s 坐標超出范圍[0.0, 1.0]的情況,GL_TEXTURE_WRAP_T 設定t 坐標超出范圍[0.0, 1.0]的情況。有三種包裝模式供選擇

  

   注意,紋理包裝模式對過濾行為有影響。例如紋理坐標是邊緣時,雙線性過濾將掃描紋理的邊緣。這時包裝模式將決定哪個紋理是紋理邊緣的外面而應用于過濾算法。如果你不想要任何形式的重復,應該使用GL_CLAMP_TO_EDGE。

  下圖是使用紋理繪制正方形在三種包裝模式中的效果圖

  

   

//void Draw ( ESContext *esContext ){   UserData *userData = esContext->userData;   GLfloat vVertices[] = { -0.3f,  0.3f, 0.0f, 1.0f,  // Position 0                           -1.0f,  -1.0f,              // TexCoord 0                           -0.3f, -0.3f, 0.0f, 1.0f, // Position 1                           -1.0f,  2.0f,              // TexCoord 1                           0.3f, -0.3f, 0.0f, 1.0f, // Position 2                           2.0f,  2.0f,              // TexCoord 2                           0.3f,  0.3f, 0.0f, 1.0f,  // Position 3                           2.0f,  -1.0f               // TexCoord 3                         };   GLushort indices[] = { 0, 1, 2, 0, 2, 3 };   // Set the viewport   glViewport ( 0, 0, esContext->width, esContext->height );   // Clear the color buffer   glClear ( GL_COLOR_BUFFER_BIT );   // Use the program object   glUseProgram ( userData->programObject );   // Load the vertex position   glVertexAttribPointer ( 0, 4, GL_FLOAT,                           GL_FALSE, 6 * sizeof ( GLfloat ), vVertices );   // Load the texture coordinate   glVertexAttribPointer ( 1, 2, GL_FLOAT,                           GL_FALSE, 6 * sizeof ( GLfloat ), &vVertices[4] );   glEnableVertexAttribArray ( 0 );   glEnableVertexAttribArray ( 1 );   // Bind the texture   glActiveTexture ( GL_TEXTURE0 );   glBindTexture ( GL_TEXTURE_2D, userData->textureId );   // Set the sampler texture unit to 0   glUniform1i ( userData->samplerLoc, 0 );   // Draw quad with repeat wrap mode   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );   glUniform1f ( userData->offsetLoc, -0.7f );   glDrawElements ( GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices );   // Draw quad with clamp to edge wrap mode   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );   glUniform1f ( userData->offsetLoc, 0.0f );   glDrawElements ( GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices );   // Draw quad with mirrored repeat   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT );   glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT );   glUniform1f ( userData->offsetLoc, 0.7f );   glDrawElements ( GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices );}

 

 

  

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美综合在线视频| 久久精品免费播放| 亚洲视频自拍偷拍| 国产国语刺激对白av不卡| 亚洲视屏在线播放| 日本精品一区二区三区在线播放视频| 欧美做受高潮电影o| 69视频在线播放| 亚洲福利在线观看| 日韩美女av在线| 欧美综合在线观看| 欧美在线视频在线播放完整版免费观看| 欧美激情视频一区二区三区不卡| 亚洲电影免费观看高清完整版在线| 国产亚洲一级高清| 九色成人免费视频| 亚洲一区中文字幕在线观看| 中文字幕日本精品| 最近2019年好看中文字幕视频| 麻豆乱码国产一区二区三区| 欧美电影《睫毛膏》| 国产精品免费久久久久久| 亚洲区免费影片| 日韩电影中文字幕av| 欧美日韩精品在线视频| 国产美女久久精品香蕉69| 亚洲国产另类 国产精品国产免费| 日韩精品日韩在线观看| 91欧美精品成人综合在线观看| 久久久精品999| 国产精品日韩在线一区| 成人精品久久一区二区三区| 国产丝袜精品视频| 亚洲视频在线观看网站| 亚洲第一免费播放区| 亚洲的天堂在线中文字幕| 日韩高清电影好看的电视剧电影| 在线精品视频视频中文字幕| 国产精品女主播| 亚洲一区二区三区xxx视频| 欧美激情在线狂野欧美精品| 成人乱人伦精品视频在线观看| 亚洲人成在线观看网站高清| 亚洲天堂2020| 欧美黑人视频一区| 日韩免费在线看| 在线日韩欧美视频| 成人午夜在线影院| 影音先锋欧美在线资源| 亚洲丝袜一区在线| 国产亚洲免费的视频看| 久久综合伊人77777尤物| 久久综合亚洲社区| 欧美色播在线播放| 精品国产乱码久久久久久婷婷| 欧美性猛交xxxx乱大交极品| 亚洲国产小视频在线观看| 亚洲女人被黑人巨大进入al| 久久777国产线看观看精品| 国产一区二区黄| 国产性猛交xxxx免费看久久| 性欧美办公室18xxxxhd| 欧美中在线观看| 久久成人精品一区二区三区| 中文字幕不卡在线视频极品| 中文在线资源观看视频网站免费不卡| 国产精品久久久久久久午夜| 精品调教chinesegay| 91情侣偷在线精品国产| 日韩精品中文字幕在线| 欧美在线亚洲在线| 欧美一级淫片丝袜脚交| 精品国产一区二区三区四区在线观看| 亚洲男人天天操| 九九热这里只有在线精品视| 日韩电视剧在线观看免费网站| 久久久久中文字幕| 国产丝袜精品第一页| 国产精品一区二区三区毛片淫片| 欧美日韩高清在线观看| 2020国产精品视频| 国产精品jizz在线观看麻豆| 色偷偷av一区二区三区| 性色av一区二区三区| 91精品国产自产在线观看永久| 91麻豆国产语对白在线观看| 日av在线播放中文不卡| 精品国产一区av| 国产精品久久久久久久久男| 国内精品美女av在线播放| 超碰精品一区二区三区乱码| 两个人的视频www国产精品| 精品国产乱码久久久久久天美| 2019中文字幕免费视频| 2019中文在线观看| 精品国产91乱高清在线观看| 91精品国产综合久久香蕉的用户体验| xvideos成人免费中文版| 亚洲国产精品久久久久秋霞蜜臀| 97国产在线观看| 7777免费精品视频| 久久伊人精品视频| 国产福利视频一区| 久久久成人的性感天堂| 国产做受69高潮| 欧美性高跟鞋xxxxhd| 日韩精品中文字幕在线观看| 人九九综合九九宗合| 欧美夫妻性生活视频| 97成人精品区在线播放| 国产精品视频资源| 91在线高清免费观看| 另类美女黄大片| 日韩高清av一区二区三区| 亚洲综合中文字幕68页| 日韩免费观看高清| 色偷偷亚洲男人天堂| 精品久久久久久久久久国产| 日韩av有码在线| 欧美亚洲另类视频| 欧美一级视频在线观看| 国产精品自产拍在线观| 欧美性理论片在线观看片免费| 国产精品美女免费视频| 亚洲精品一区中文| 久久影视电视剧免费网站| 黄色成人av在线| 亚洲精品中文字| 欧美日韩加勒比精品一区| 日韩亚洲综合在线| 97色伦亚洲国产| 国产不卡av在线免费观看| 久久国产精品视频| 精品视频在线播放免| 91日韩在线播放| 久久色在线播放| 亚洲电影免费观看高清完整版在线| 亚洲欧美日韩图片| 欧美日韩美女视频| 在线看日韩av| 日韩精品视频中文在线观看| 清纯唯美亚洲综合| 伊人久久久久久久久久久| 国产精品成人观看视频国产奇米| 亚洲精品免费网站| 精品国产乱码久久久久久婷婷| 亚洲女人天堂成人av在线| 91夜夜揉人人捏人人添红杏| 日韩激情视频在线| 国产精品青草久久久久福利99| 亚洲一区美女视频在线观看免费| 久久99青青精品免费观看| 亚洲黄页视频免费观看| 欧美二区在线播放| 精品欧美一区二区三区| 久久久天堂国产精品女人| 国产一区二中文字幕在线看| 黑人巨大精品欧美一区二区免费| 精品亚洲一区二区三区在线播放| 欧美日韩国产精品一区| 国内精品视频久久| 色综合久综合久久综合久鬼88| 国产玖玖精品视频| 中文字幕av一区二区|