日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL ES 3.0之Texturing纹理详解(二)

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL ES 3.0之Texturing纹理详解(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

?  

// Load mipmap level 0 glTexImage2D(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 levelGenMipMap2D( 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 iterationprevImage = newImage;level++;   // Half the width and heightwidth = 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 10.3f, -0.3f, 0.0f, 1.0f, // Position 22.0f, 2.0f, // TexCoord 20.3f, 0.3f, 0.0f, 1.0f, // Position 32.0f, -1.0f // TexCoord 3 };GLushort indices[] = { 0, 1, 2, 0, 2, 3 };// Set the viewportglViewport ( 0, 0, esContext->width, esContext->height );// Clear the color buffer glClear ( GL_COLOR_BUFFER_BIT );// Use the program objectglUseProgram ( userData->programObject );// Load the vertex positionglVertexAttribPointer ( 0, 4, GL_FLOAT,GL_FALSE, 6 * sizeof ( GLfloat ), vVertices );// Load the texture coordinateglVertexAttribPointer ( 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 0glUniform1i ( 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 ); }

?

?

  

?

轉載于:https://www.cnblogs.com/salam/p/4948690.html

總結

以上是生活随笔為你收集整理的OpenGL ES 3.0之Texturing纹理详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产区精品区 | 欧美一级片播放 | 东北女人啪啪ⅹxx对白 | 8x国产一区二区三区精品推荐 | 少妇又白又嫩又色又粗 | 国产成人精品一区二区三区 | 超碰1000 | 日日骚一区二区 | 亚洲妇女体内精汇编 | 中文字幕1区 | 亚洲女人18毛片水真多 | 欧美成人免费在线视频 | 日韩色 | 91久久久久久久久久久久久 | 精品黑人一区二区三区在线观看 | 男人天堂成人 | 欧洲av无码放荡人妇网站 | 亚洲AV成人无码精品久久盆瓶 | 国产精品高潮呻吟av | 亚洲图片一区二区 | 亚洲第一页在线观看 | 久久99久久久久 | 91视频免费观看 | 搞黄网站在线观看 | 男人的天堂免费av | 国产精品第1页 | 欧洲一区二区 | 美女喷液视频 | 波多野结衣视频在线 | 超碰成人免费电影 | www.av在线播放 | 特级av| 国产午夜大地久久 | 亚州色图欧美色图| 91成人免费电影 | 青青草国产一区二区三区 | 日韩免费观看一区二区 | 精品动漫一区二区三区在线观看 | 国产成人aaaa| 国产精品视频一二三区 | 久久亚洲AV成人无码一二三 | 国产人妻一区二区 | 黄色免费网 | 天天摸天天爽 | 色噜噜一区二区三区 | 丰满人妻一区二区 | 91黄色免费看 | 婷婷五月精品中文字幕 | 成年人在线视频观看 | 亚洲一区二三区 | 日韩av一区二区三区在线观看 | 黄瓜污视频 | 亚洲影院一区二区三区 | 一级特黄av | 日本四级电影 | 一区二区在线观看免费视频 | 欧美日韩在线视频观看 | 香蕉视频亚洲一级 | 在线中文字日产幕 | 最近最经典中文mv字幕 | 打屁股黄文 | 国产精品视频一二三区 | 久久精品一二区 | 狠狠久| 色狠| 国产一区二区三区在线播放无 | 国产免费观看视频 | 女人脱裤子让男人捅 | wwwsss在线观看 | 精品国产aⅴ一区二区三区四川人 | 国产精品国产精品国产 | 污片免费在线观看 | 91麻豆产精品久久久久久夏晴子 | 疯狂做受xxxx国产 | 国产91沙发系列 | 国产人妻777人伦精品hd | 香蕉在线观看 | 干爹你真棒插曲免费 | 色哟哟国产精品色哟哟 | 二级毛片在线观看 | 大香伊人 | 国产亚洲一区在线 | 怡红院成人在线 | 少妇扒开粉嫩小泬视频 | 女同性做爰三级 | 香蕉尹人| 免费日韩视频 | 爱爱视频在线播放 | 天堂资源最新在线 | 国产精品久久久久久久毛片 | 天堂色网 | 在线高清av | 国产成人午夜 | aa片在线观看视频在线播放 | 天堂免费av | 免费观看一区二区三区视频 | 日韩狠狠操 | av手机在线看 | 国产一区毛片 |