Opengl 紋理(知識點)

紋理(知識點)

以下是紋理用到的知識點,至于具體流程操作請參考:
https://learnopengl.com/Getting-started/Textures

紋理環繞

紋理環繞(Texture Wrapping)的作用是定義在紋理坐標超出標準范圍時系統如何處理。紋理坐標通常在[0, 1]范圍內,表示紋理圖像上的相對位置。當紋理坐標超出這個范圍時,紋理包裹規定了采取的行為,以防止紋理映射時出現問題。

以下是紋理環繞的主要作用:

  1. 處理紋理坐標超出標準范圍: 紋理包裹確保紋理坐標在 [0, 1] 范圍內,防止超出范圍導致的問題。這包括避免紋理的重復、拉伸、擠壓或其他不自然的效果。

  2. 提供更自然的紋理映射: 在圖形渲染中,使用紋理包裹可以確保紋理在幾何表面上的映射看起來更加自然和符合預期。選擇適當的包裹模式有助于消除視覺上的不連續性和不規則性。

常見的紋理包裹模式包括:

  • 重復(GL_REPEAT): 超出[0, 1]范圍的坐標會被截斷,將其取小數部分,使其重新回到[0, 1]范圍。適用于需要紋理在幾何圖形表面上多次重復的情況,如地板、墻壁等。

  • 鏡像重復(GL_MIRRORED_REPEAT): 類似于重復,但在超出范圍時進行鏡像反轉。適用于需要紋理在重復的同時進行反轉的情況,有時可以提供更平滑的過渡。

  • 夾取到邊緣(GL_CLAMP_TO_EDGE): 超出范圍的坐標會被夾取到0.0或1.0,即被強制限制在[0, 1]范圍內。適用于需要防止紋理在邊緣拉伸的情況,如繪制平鋪的地板。

  • 夾取到邊緣,但在超出范圍時進行插值(GL_CLAMP_TO_BORDER): 超出范圍的坐標會被夾取到一個指定的邊界顏色。適用于需要在超出范圍時保持紋理邊緣的顏色,以模擬紋理的邊緣效果。

void glTexParameteri(GLenum target, GLenum pname, GLint param);是OpenGL中用于設置紋理參數的函數。這個函數允許你指定紋理對象的一些屬性,如紋理過濾、紋理環繞等
  • target: 參數指定了目標紋理,可以是 GL_TEXTURE_1D、GL_TEXTURE_2D、- GL_TEXTURE_3D 等。

  • pname: 參數指定了你要設置的紋理參數的名稱,比如紋理過濾參數、紋理環繞參數等。

  • param 參數指定了你要設置的參數值。

    // 設置紋理過濾參數glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// 設置紋理環繞參數glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

紋理過濾

    紋理過濾(Texture Filtering)是指在紋理映射到圖形對象表面時,系統如何根據紋理坐標對紋理進行采樣的過程。紋理過濾的作用是消除或減輕因紋理像素與渲染像素之間坐標不匹配而產生的鋸齒狀或失真等視覺問題。總結: 消除或減輕因紋理像素與渲染像素之間坐標不匹配而產生的鋸齒狀或失真等視覺問題

解決辦法:

紋理過濾有多種方式,其中最常見的是點過濾和線性過濾。

  1. 點過濾:
  • 點過濾是最簡單的過濾方式,它會直接選取最接近紋理坐標的一個紋理像素的顏色。
  • 適用于放大紋理,但在縮小紋理時可能產生鋸齒狀的效果。
  1. 線性過濾:
  • 線性過濾考慮附近四個紋理像素的顏色,通過加權平均的方式進行插值。
  • 在放大和縮小紋理時都相對較好地保持了圖像的平滑過渡,減少了鋸齒狀效果

總結:

在紋理縮小時使用最近鄰過濾,并在放大紋理時使用線性過濾glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

生成和加載紋理

生成紋理

    // 創建紋理對象unsigned int texture;glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_2D, texture);// 紋理環繞glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);// 紋理過濾glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// 轉換數據int width, height, nrChannels;unsigned char *data = stbi_load("container.jpg", &width, &height, &nrChannels, 0);if (data){glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);glGenerateMipmap(GL_TEXTURE_2D);}else{std::cout << "Failed to load texture" << std::endl;}stbi_image_free(data);

加載紋理

其實就和 頂點數據以及顏色加載一樣。解析坐標里面的紋理坐標,復制到VBO, 然后通過glVertexAttribPointer 解析紋理屬性。利用glEnableVertexAttribArray 將數據和 頂點著色器關聯。頂點著色器的輸出作為片段著色器的輸入(FragColor = texture(ourTexture, TexCoord);)

注意點:

紋理單元: 使用一個紋理的時候,紋理單元默認是 0 , 這個時候不用刻意去設置紋理單元, 但是當紋理單元數量超過1個的時候,就要設置。 單元默認是 0 - 128  所以不同的紋理綁定不同的紋理單元

代碼鏈接地址:https://github.com/heisai/OpenglProject/tree/master/OpenglRectangleTexture

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 10.0 mtp模式下連接PC后只顯示指定文件夾功能實現

1. 前言 在android10.0的系統定制化開發中,對于usb作為otg連接電腦時,在mtp模式下會作為一個存儲器在電腦端顯示,作為電腦的 一個盤符,來顯示設備的內部存儲的文件,所以說如果要對設備內部的資料做保密處理的時候,需要在mtp模式下不顯示某些 文件夾,接下來就分析下相關…

【算法萌新闖力扣】:兩句話中的不常見單詞

力扣熱題&#xff1a;兩句話中的不常見單詞 開篇 今天是備戰藍橋杯的第19天&#xff0c;今天到目前刷了4道力扣算法題。其中&#xff0c;這道題是對我來說收獲最大的一道&#xff0c;讓我更熟練地掌握了一些算法題中方法&#xff0c;于是來與大家分享一下。 題目鏈接: 884.兩…

服務器中了elbie勒索病毒解決辦法,elbie勒索病毒解密數據恢復

科技技術的不斷發展&#xff0c;為企業的生產運營提供了極大便利&#xff0c;但網絡安全威脅也不斷增加&#xff0c;近期云天數據恢復中心陸續接到很多企業的求助&#xff0c;企業的服務器中了elbie勒索病毒&#xff0c;導致系統癱瘓&#xff0c;所有業務無法正常開展&#xff…

鏈表OJ--下

文章目錄 前言一、鏈表分割二、環形鏈表I三、環形鏈表II四、鏈表的回文結構五、隨機鏈表的復制 前言 一、鏈表分割 牛客網CM11&#xff1a;鏈表分割- - -點擊此處傳送 題解&#xff1a; 思路圖&#xff1a; 代碼&#xff1a; 二、環形鏈表I 力扣141&#xff1a;環形鏈表…

使用SpringBoot集成MyBatis對管理員的查詢操作

增刪改查中的查詢操作&#xff0c;對所有的普通管理員進行查詢操作。 效果展示&#xff1a; 不僅可以在打開頁面時進行對管理員的自動查詢操作&#xff0c;還可以在輸入框進行查詢。 首先是前端向后端發送POST請求&#xff0c;后端接收到請求&#xff0c;如果是有參數傳到后端…

【uni-app】uniapp中彈出輸入框的示例

uni.showModal({title: 請輸入企業名稱,content: ,editable: true, //是否顯示輸入框placeholderText: 請輸入企業名稱, //輸入框提示內容confirmText: 確認,cancelText: 取消,success: (res) > {if (res.confirm) {this.checkDesc.name res.content;// console.log(輸入的…

內部網關協議_路由信息協議RIP_開放路徑優先OSPF協議_基本知識

目錄: 因特網路由選擇協議概述 路由信息協議RIP 開放路徑優先OSPF協議 因特網路由選擇協議概述 一.路由選擇分類 靜態路由選擇和動態路由選擇 靜態路由選擇: 采用人工配置的方式給路由器添加網絡路由、默認路由和特定主機路由等路由條目。靜態路由選擇簡單、開銷小&#…

移動端的自動化基于類實現啟動一次應用跑全部用例

1.unittest框架 class TestStringMethods(unittest.TestCase): def setUp(self) -> None: # 每一條測試用例開始前執行 print("setup") def tearDown(self) -> None: # 每一條測試用例結束后執行 print("teardown") …

八、ffmpeg錄制視頻為yuv文件

前言 測試環境&#xff1a; ffmpeg的4.3.2自行編譯版本windows環境qt5.12 圖片的一些重要知識&#xff1a; RGB圖片 位深度&#xff1a;每一個像素都會使用n個二進制位來存儲顏色信息。每一個像素的顏色都是由紅&#xff08;Red&#xff09;、綠&#xff08;Green&#xff0…

【python】python旅游網數據抓取分析(源碼+論文)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

C語言——結構體的應用

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 路還在繼續&#xff0c;夢還在期…

webGL技術開發的軟件類型

WebGL 是一種在瀏覽器中渲染 2D 和 3D 圖形的 JavaScript API。通過 WebGL&#xff0c;你可以創建各種類型的軟件項目&#xff0c;特別是那些需要強大圖形渲染能力的項目。以下是一些你可以使用 WebGL 實現的軟件項目類型&#xff0c;希望對大家有所幫助。北京木奇移動技術有限…

老生常談之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先來一個模棱兩可的說法&#xff1a;因為精度丟失、存儲溢出的問題 先復習一下二進制的轉換方法&#xff1a; 整數&#xff1a;除以基數&#xff0c;取余&#xff0c;自底向上小數&#xff1a;乘以基數&#xff0c;取整&#xff0c;自頂向下 接著&#xff0c;復習一下雙精度…

Linux使用操作

各類小技巧 ctrlc強制停止 ctrld退出賬戶的登錄 或者退出某些特定程序的專屬頁面 history 查看歷史命令 !命令前綴&#xff0c;自動執行上一次匹配前綴的命令 ctrlr 輸入內容去匹配歷史命令 光標移動快捷鍵 ctrla&#xff0c;跳到命令開頭 ctrle&#xff0c;跳到命令結尾…

【C語言_題庫】輸入4個整數,要求按照從小到大的順序輸出

題目 輸入4個整數 要求按照從小到大的順序輸出 書上的學習輔導答案 // 主要部分 int main(){int t,a,b,c,d;printf("請輸入四個數:");scanf("%d,%d,%d,%d"

SkyWalking全景解析:從原理到實現的分布式追蹤之旅

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交給時間 &#x1f3e0; &#xff1a;小破站 SkyWalking全景解析&#xff1a;從原理到實現的分布式追蹤之旅 前言第一&#xff1a;SkyWalking簡介第二&#xff1a;實現原理概覽第三&#xff1a;主鍵與架構第四&#xff1…

【計算機基礎】通過插件plantuml,實現在VScode里面繪制狀態機

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

數學與她的

文章目錄 定義域函數的定義域&#xff1a;一般地復合函數求解極值&#xff0c;單調性綜合考題&#xff1a; 定義域 函數的定義域&#xff1a; 求定義域的原則性問題&#xff08;通用&#xff09;分母不為0 偶次根式的被開方式為非負&#xff08; ≥ 0 &#xff09; 偶次根式的…

redis運維(十五) 集合

一 集合 ① 概念 集合的元素在redis里面的世界是member集合&#xff1a; setset集合當中不允許重復的元素&#xff0c;而且set集合當中元素是沒有順序的,不存在元素下標 ② sadd、smembers、srem ③ sismember、srandmember、spop、scard spop 命令用于移除集合中的指定 …

sql語法大全

1&#xff0c;創建數據庫 create database 數據庫名字; 2,查看所有的數據庫名稱 show databases; MySQL服務器已有4個數據庫&#xff0c;這些數據庫都是MySQL安裝時自動創建的。 information_schema 和 performance_schema 數據庫分別是 MySQL 服務器的數據字典&#xff08;…