Qt中的OpenGL (4)[紋理]

文章說明

本文是學習OpenGL的筆記,主要參考大神JoeyDeVriesLearnOpenGL第六課《紋理》,并將教程中的代碼基于Qt進行實現。

學習目標

  • 掌握紋理基本知識
  • 掌握紋理貼圖

目錄結構

|-
|-- HelloTextures|--- hello_textures.cpp|--- hello_textures.h|--- main.cpp|--- CMakeLists.txt
|-- CMakeLists.txt

整個項目的全部CMakeLists.txt文件與上一篇 Qt中的OpenGL (3)[著色器] 中的內容基本一致,只需要將全部HelloShader替換成HelloTextures就可以了。

在前邊的教程中繪制三角形的時候用到頂點的位置和顏色兩個屬性,三個頂點屬性數據可以完成一個純色(三點顏色一致)或者彩色(三點顏色不一致)的三角形,但下面這種顏色的三角形應該就不會只有三個頂點屬性這么簡單了。

紋理結果展示
要繪制上面這個三角形就需要用到大量的頂點屬性,并且每個頂點屬性都需要帶有顏色屬性,并且顏色屬性的設置要細致到每個像素,這種做法會增加額外的開銷。這個時候就需要用到紋理了,簡單來說紋理就是將圖片按照規則貼到物體模型上。

紋理坐標

在現實生活中如果需要給一個物體貼上圖片正常情況下是要先測量物體大小然后準備一個合適的貼紙,最后物體的邊角對應貼紙的邊角完全貼合,在開發過程中模型與紋理圖片之間經常存在不匹配的情況,如下圖所示:

紋理坐標示意圖
上圖中紋理圖片的像素是200 * 200而三角形在屏幕上顯示的像素是1000 * 1000這無論如何也無法一一對應了。此時,就需要使用紋理坐標(UV),一般使用U和V表示紋理坐標,其中U表示橫坐標百分比V表示縱坐標百分比,使用百分比的方式代替實際數值的對應方式,紋理坐標起始于左下角(0, 0),終止于右上角(1, 1)

類似于上面紋理圖映射到圖形的場景,紋理設置如下:

  • 三角形左下角對應紋理圖左下角因此紋理坐標就是(0.0, 0.0),對應的像素值就是w=0, h=0
  • 三角形右下角對應紋理圖右下角因此紋理坐標就是(1.0, 0.0),對應的像素值就是w=200, h=0
  • 三角形頂角對應紋理圖的上中點因此紋理坐標就是(0.5, 1.0),對應的像素值就是w=100, h=200

注意:除了設置的紋理坐標外,其他紋理坐標都是根據已設置的紋理坐標經過插值計算而來的。

紋理過濾

單獨使用紋理坐標也不能解決需要繪制的像素和實際紋理圖片像素不匹配問題,解決繪制像素與紋理像素不匹配問題有兩種方式,分別是Nearest Neighbor FilteringLinear Filtering

鄰近過濾(Nearest Neighbor Filtering)

這是一種默認的過濾方式,根據UV坐標計算出來的小數坐標,取最近的整數坐標像素,這種取值方式可能回去到會多次相同的像素色塊,導致顆粒感比較強是一種像素風格。

鄰近紋理過濾

線性插值過濾(Linear Filtering)

另外一種是根據UV計算出來的小數坐標,綜合周邊像素得到新的像素。這種方式根據周圍像素產生新的像素色塊,相當于對原始紋理圖片進行擴充。

雙線性插值過濾
這兩種過濾方式在解決像素不匹配問題上并沒有絕對的使用規則。一般情況使用情況如下:

  • 需要繪制像素超過圖片紋理像素,使用線性過濾。
  • 需要繪制像素少于圖片紋理像素,使用鄰近過濾。

設置過濾方式的函數如下,這個函數包含了紋理的過濾方式設置和紋理的環繞方式,這里先說過濾方式相關參數

void glTexParameteri(GLenum target, GLenum pname, GLint param);
  • 設置紋理過濾方式

    • target: 指定紋理目標類型,它表示要設置參數的紋理類型。
    • pname: 指定要設置的紋理參數名稱。
    • param: 指定過濾方式。
  • target可設置參數,不區分過濾設置和環繞設置

    • GL_TEXTURE_1D:一維紋理,常用于模擬漸變效果,如顏色漸變條。

    • GL_TEXTURE_2D:二維紋理,最常用的紋理類型,用于給物體表面貼圖,像給立方體的每個面貼上不同的圖片。

    • GL_TEXTURE_3D:三維紋理,包含深度信息,可用于表示體積數據,例如醫學上的 CT 掃描數據。

    • GL_TEXTURE_CUBE_MAP:立方體貼圖,由 6 個二維紋理組成,用于模擬環境反射,比如天空盒效果。

    • GL_TEXTURE_1D_ARRAY:一維紋理數組,由多個一維紋理組成,可用于存儲多個相關的一維紋理數據。

    • GL_TEXTURE_2D_

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

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

相關文章

【Java多線程從青銅到王者】阻塞隊列(十)

阻塞隊列 阻塞隊列也是一種隊列,先進的先出 阻塞隊列就是對普通的隊列做出的拓展 阻塞隊列的特性 1.線程安全的,我們普通的隊列值線程不安全的 2.具有阻塞的特性: a》如果針對一個已經滿了的隊列進行如隊列操作的話,入隊列操作就…

Python打卡第52天

浙大疏錦行 作業: 對于day41的簡單cnn,看看是否可以借助調參指南進一步提高精度。 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import ma…

力扣100- 環形鏈表

方法一 遍歷 循環鏈表&#xff0c;查找鏈表節點是否重復出現 public boolean hasCycle(ListNode head) {Set<ListNode> set new HashSet<>(); if (head null) return false; while (head ! null) {if (set.contains(head)) {return true;}set.add(head);head …

Java + Spring Boot + Mybatis 插入數據后,獲取自增 id 的方法

在 MyBatis 中使用 useGeneratedKeys"true" 獲取新插入記錄的自增 ID 值&#xff0c;可通過以下步驟實現&#xff1a; 1. 配置 Mapper XML 在插入語句的 <insert> 標簽中設置&#xff1a; xml 復制 下載 運行 <insert id"insertUser" para…

Meta發布V-JEPA 2世界模型及物理推理新基準,推動AI在物理世界中的認知與規劃能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

觸覺智能RK3576核心板工業應用之軟硬件全國產化,成功適配開源鴻蒙OpenHarmony5.0

在全球科技競爭加劇和供應鏈安全日益重要的背景下&#xff0c;實現關鍵軟硬件的全國產化替代已成為國家戰略和產業共識。在這一背景下&#xff0c;觸覺智能推出RK3576核心板,率先適配開源鴻蒙OpenHarmony5.0操作系統&#xff0c;真正實現了從芯片到操作系統的全棧國產化方案&am…

前端基礎知識ES6系列 - 01(var、let、const之間的區別)

一、var 在ES5中&#xff0c;頂層對象的屬性和全局變量是等價的&#xff0c;用var聲明的變量既是全局變量&#xff0c;也是頂層變量 注意&#xff1a;頂層對象&#xff0c;在瀏覽器環境指的是window對象&#xff0c;在 Node 指的是global對象 var a 10; console.log(window…

Python Docker 鏡像構建完整指南:從基礎到優化

Python 是一門廣泛使用的編程語言,在容器化環境中,構建和使用 Python 鏡像是非常常見的任務。本文將提供一個完整的指南,包括選擇基礎鏡像、制作流程、不同場景下的應用、安全性最佳實踐以及鏡像優化策略。 1. 選擇合適的基礎鏡像 1.1 官方 Python 鏡像 Docker Hub 提供了…

【狂飆AGI】第1課:大模型概述

目錄 &#xff08;一&#xff09;大模型概念解析&#xff08;二&#xff09;大模型發展歷程&#xff08;三&#xff09;大模型發展現狀&#xff08;1&#xff09;OpenAI&#xff08;2&#xff09;微軟&#xff08;3&#xff09;谷歌&#xff08;4&#xff09;Meta &#xff08;…

vite ts 配置使用@ 允許js

1.vite.config.ts 配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import { fileURLToPath, URL } from node:url import setup_extend from vite-plugin-vue-setup-extend// https://vite.dev/config/ export default defineConfig({plugins: …

使用Ollama+open-webui搭建本地AI模型

本地搭建AI模型 說明&#xff1a;1、下載Ollama2、下載模型3、pip安裝open-webui&#xff08;不推薦&#xff09;1、Python版本不對應2、下載wheels失敗 4、docker安裝open-webui 說明&#xff1a; 在windows上搭建本地AI&#xff0c;使用Ollamaopen-webui的方式&#xff0c;可…

第 87 場周賽:比較含退格的字符串、數組中的最長山脈、一手順子、訪問所有節點的最短路徑

Q1、[簡單] 比較含退格的字符串 1、題目描述 給定 s 和 t 兩個字符串&#xff0c;當它們分別被輸入到空白的文本編輯器后&#xff0c;如果兩者相等&#xff0c;返回 true 。# 代表退格字符。 **注意&#xff1a;**如果對空文本輸入退格字符&#xff0c;文本繼續為空。 示例 …

linux安裝阿里DataX實現數據遷移

目錄 下載datax工具包(如果下載慢&#xff0c;請嘗試其他國內鏡像站或其他網站下載相應資源) 解壓工具包到當前目錄里 接著進入conf配置目錄并創建一個myjob.json&#xff08;臨時測試json&#xff09;&#xff0c;myjob.json內容如下&#xff0c;用于模擬test庫tab1表數據同…

C++ 引用介紹

很好&#xff01;既然你有 C 的基礎&#xff0c;那么理解 C 的「引用&#xff08;reference&#xff09;」會容易很多。我們來一步步講清楚這個概念。 &#x1f31f; 一句話總結&#xff1a; C 引用&#xff08;reference&#xff09;就是已存在變量的“別名”&#xff0c;它不…

學習筆記086——@PostConstruct注解和InitializingBean接口的使用

文章目錄 1、PostConstruct注解1.1 介紹1.2 用法1.3 場景 2、InitializingBean接口2.1 介紹2.2 用法 1、PostConstruct注解 1.1 介紹 PostConstruct 是 Java EE/Jakarta EE 中的一個注解&#xff0c;用于標記一個方法在依賴注入完成后執行初始化操作。它通常與 Spring 框架一…

考研系列—408真題操作系統篇(2015-2019)

目錄 # 2015年 1.死鎖處理 (1)預防死鎖 (2)避免死鎖 (3)死鎖檢測和解除 2.請求分頁系統的頁面置換策略、頁面置換策略 3.頁、頁框、頁表,基本分頁系統 # 2016年 1.異常、中斷 2.頁置換算法 3.進程的互斥操作 4.SPOOLing技術(從軟件方面實現設備共享) 5.一定要牢記…

argocd部署cli工具并添加k8s集群

先決條件: 1.已經有k8s集群,(網上一萬種部署方式,這里我使用的是kubekey部署的),也埋了個坑,后面說明. 2.已經部署好argocd,并驗證web已經可以訪問.參見 k8s部署argocd-CSDN博客 部署客戶端工具, 這里我是從web頁面上直接下載的對應版本的cli工具. 打開已經部署好的argoc…

打卡day52

簡單cnn 借助調參指南進一步提高精度 基礎CNN模型代碼 import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import cifar10 from tensorflow.keras.utils import to_categorical# 加載數據 (train_images, train_labels),…

OpenGL ES繪制3D圖形以及設置視口

文章目錄 關于 glDrawElements基本概念使用場景mode 繪制模式type 索引數據類型indices 索引緩沖區工作原理繪制正方體實例 視口透視投影&#xff08;Perspective Projection&#xff09;正交投影&#xff08;Orthographic Projection&#xff09;正交投影和透視投影對比 關于 …

【SAS求解多元回歸方程】REG多元回歸分析-多元一次回歸

多元一次回歸是一種統計方法&#xff0c;用于分析多個自變量&#xff08;解釋變量&#xff09;與一個因變量&#xff08;響應變量&#xff09;之間的線性關系。 目錄 【示例】 基本語法 SAS代碼 參數估計 方差分析 回歸統計量 y的擬合診斷 y的回歸變量值 【示例】 設Y…