【OSG學習筆記】Day 8: 紋理貼圖——賦予模型細節

在這里插入圖片描述

在 OSG(Open Scene Graph)中,紋理貼圖是為模型添加細節的關鍵技術,主要涉及紋理加載UV 映射多重紋理疊加三部分。

基礎理論

紋理加載

紋理的作用,就是將2D圖像映射到3D模型表面,增強視覺細節。

紋理類型與格式支持:

OSG 支持多種圖像格式,包括常見的 .jpg/.jpeg、.png、.tga、.bmp 等,推薦使用 .png(支持透明通道)或 .dds(壓縮格式,性能更優)。

代碼示例

第一步:創建并加載紋理
// 創建2D紋理對象
ref_ptr<Texture2D> texture = new Texture2D;// 從文件加載圖像數據(自動識別格式)
ref_ptr<Image> image = osgDB::readImageFile("texture.png");
if (!image) {OSG_WARN << "Failed to load texture image!" << std::endl;return nullptr;
}// 綁定圖像到紋理
texture->setImage(image);
第二步:將紋理關聯到幾何體
// 創建Geode節點并綁定紋理
ref_ptr<Geode> geode = new Geode;
geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture.get());// 添加幾何體(如四邊形)
ref_ptr<Geometry> geometry = new Geometry;
geode->addDrawable(geometry);

UV 映射原理

UV 坐標:范圍為 [0, 1],用于指定紋理像素在模型表面的對應位置(U 為橫向,V 為縱向)。

作用:控制紋理如何 “包裹” 模型,避免拉伸、扭曲或錯位。

手動設置 UV 坐標

// 假設幾何體為四邊形,頂點坐標為(-1,-1,0), (1,-1,0), (1,1,0), (-1,1,0)
ref_ptr<Vec3Array> vertices = new Vec3Array;
vertices->push_back(Vec3(-1, -1, 0));
vertices->push_back(Vec3(1, -1, 0));
vertices->push_back(Vec3(1, 1, 0));
vertices->push_back(Vec3(-1, 1, 0));
geometry->setVertexArray(vertices);// 設置UV坐標(與頂點一一對應)
ref_ptr<Vec2Array> texCoords = new Vec2Array;
texCoords->push_back(Vec2(0, 0));   // 左下角對應紋理原點
texCoords->push_back(Vec2(1, 0));   // 右下角
texCoords->push_back(Vec2

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

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

相關文章

基于事件驅動的云原生后端架構設計:從理念到落地

??個人主頁??:慌ZHANG-CSDN博客 ????期待您的關注 ???? 一、引言:微服務之后,事件驅動正在成為新范式 隨著業務復雜度的提升,傳統同步式微服務調用模式逐漸暴露出瓶頸:服務間耦合度高、并發能力有限、出錯鏈路復雜。而在互聯網業務、金融交易、物聯網等場景中…

vue3:十一、主頁面布局(修改頂部導航欄樣式-右側:用戶信息+退出登錄+全屏顯示)

一、效果 完成效果,增加頂部導航欄,右側用戶信息(其中個人中心需要后續進行頁面開發,這里只寫了退出登錄功能),以及全屏功能 二、搭建并引入右側組件 將右側內容封裝到單獨的組件,直接引入(像左側導航條等內容也是可以做成這種形式) 1、新建右側組件的頁面 在layout中…

沁恒CHV203中斷嵌套導致修改線程棧-韋東山

調試專題bug實例 2025年01月09日20點場 處理辦法1&#xff1a;就是關閉中斷嵌套 處理辦法2&#xff1a; 使用原來的棧

Qt本地化 - installTranslator不生效

bool QCoreApplication::installTranslator(QTranslator *translationFile)注意這里輸入的是QTranslator對象指針&#xff0c;如果QTranslator是局部變量&#xff0c;一旦離開其作用域就會導致翻譯失效 錯誤代碼示范&#xff1a; void ApplyTranslator(const QString& qmf…

Qt UDP組播實現與調試指南

在Qt中使用UDP組播(Multicast)可以實現高效的一對多網絡通信。以下是關鍵步驟和示例代碼: 一、UDP組播核心機制 組播地址:使用D類地址(224.0.0.0 - 239.255.255.255)TTL設置:控制數據包傳播范圍(默認1,同一網段)網絡接口:指定發送/接收的物理接口二、發送端實現 /…

PCB封裝主要組成元素

PCB&#xff08;Printed Circuit Board&#xff0c;印刷電路板&#xff09;封裝是指將電子元件固定在 PCB 上&#xff0c;并實現電氣連接的方式。主要包括以下幾類。 1. 焊盤&#xff08;Pad&#xff09; 作用&#xff1a;焊盤是 PCB 封裝中最重要的元素之一&#xff0c;它是…

前端基礎之《Vue(8)—內置組件》

一、Vue2.0中的內置組件 1、<slot> 插槽 2、<keep-alive> 動態組件 被keep-alive所包裹的組件&#xff1a; &#xff08;1&#xff09;不會被銷毀。 &#xff08;2&#xff09;還會多兩個生命周期鉤子&#xff1a;activated()、deactivated()。 &#xff08;3&a…

某大型電解鋁廠電解系統諧波治理裝置改造沃倫森電氣

電解鋁行業諧波治理解決方案——無源濾波裝置優化升級&#xff0c;保障穩定運行 在電解鋁生產過程中&#xff0c;諧波污染問題嚴重影響電網電能質量&#xff0c;甚至可能導致濾波裝置損壞&#xff0c;引發群爆事故。河南登封某大型電解鋁廠通過無源濾波裝置智能化改造&#xff…

在 Ubuntu 環境為 Elasticsearch 引入 `icu_tokenizer

1. 為什么需要 ICU 分析插件 Elasticsearch 默認的 standard tokenizer 遵循 UAX #29 規則&#xff0c;但在 CJK&#xff08;中、日、韓&#xff09;等亞洲語言上僅能按字符切分&#xff0c;無法識別詞邊界&#xff1b;對包含重音符號、大小寫或多腳本混排的文本也缺乏統一歸一…

避免事件“穿透”——Vue 中事件冒泡的理解與解決方案

一、事件冒泡是什么&#xff1f; 事件冒泡指的是&#xff1a;當某個元素上的事件被觸發后&#xff0c;事件會從該元素向其父級、祖先元素一直“冒泡”傳遞&#xff0c;直到 document。這意味著&#xff0c;如果父元素綁定了點擊事件&#xff0c;子元素觸發點擊時也可能順帶觸發…

【Java面試筆記:進階】17.一個線程兩次調用start()方法會出現什么情況?

1. 線程啟動與異常 線程啟動:Java 線程只能啟動一次,通過調用 Thread 對象的 start() 方法。多次啟動的后果:如果嘗試第二次調用 start() 方法,會拋出 IllegalThreadStateException 運行時異常。(1) 代碼示例 public class ThreadStartDemo {public static void main(Stri…

Flask + ajax上傳文件(一)

一、概述 本教程將教你如何使用Flask后端和AJAX前端實現文件上傳功能,包含完整的代碼實現和詳細解釋。 二、環境準備 1. 所需工具和庫 Python 3.xFlask框架jQuery庫Bootstrap(可選,用于美化界面)2. 安裝Flask pip install flask三、項目結構 upload_project/ ├── a…

NHANES指標推薦:TyG-WHtR

文章題目&#xff1a;Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI&#xff1a;10.1186/s12933-025-02674-z 中文標題&#xff1a;心血管健康…

OpenHarmony 開源鴻蒙北向開發——hdc工具使用及常用命令(持續更新)

hdc&#xff08;OpenHarmony Device Connector&#xff09;是為開發人員提供的用于設備連接調試的命令行工具&#xff0c;該工具需支持部署在 Windows/Linux/Mac 等系統上與 OpenHarmony 設備&#xff08;或模擬器&#xff09;進行連接調試通信。簡單來講&#xff0c;hdc 是 Op…

MCP servers源碼詳細解析

MCP servers詳細解析 Model Context Protocol (MCP) 是一個標準化協議&#xff0c;用于讓大型語言模型&#xff08;LLMs&#xff09;通過結構化服務器安全地與工具和數據源交互。項目提供了 參考實現、官方集成和社區貢獻的服務器&#xff0c;支持數據庫、API、文件系統等場景…

美樂迪電玩大廳加載機制與 RoomList 配置結構分析

本篇為《美樂迪電玩全套系統搭建》系列的第三篇&#xff0c;聚焦大廳與子游戲的動態加載機制&#xff0c;深入解析 roomlist.json 的數據結構、解析流程、入口配置方式與自定義接入擴展技巧。通過本篇內容&#xff0c;開發者可實現自由控制子游戲接入與分發策略。 一、RoomList…

HarmonyOS-ArkUI: 屬性動畫:animation

HarmonyOS-ArkUI:關鍵幀動畫 keyFrameAnimateTo-CSDN博客 HarmonyOS-ArkUI: animateTo 顯式動畫-CSDN博客 至今為止,已經講了兩個動畫了(顯式動畫,關鍵幀動畫如鏈接所示),這個屬性動畫是第三個。鴻蒙的屬性動畫,和Android中的屬性動畫,迥異,也就是名字不同罷了。所以之…

強化學習(Reinforcement Learning, RL)和深度學習(Deep Learning, DL)

強化學習&#xff08;Reinforcement Learning, RL&#xff09;和深度學習&#xff08;Deep Learning, DL&#xff09;是人工智能領域兩個重要的研究方向&#xff0c;雖然二者可以結合&#xff08;如深度強化學習&#xff09;&#xff0c;但其核心思想、目標和應用場景存在本質區…

處理任務“無需等待”:集成RabbitMQ實現異步通信與系統解耦

在前幾篇文章中&#xff0c;我們構建的Web應用遵循了一個常見的同步處理模式&#xff1a;用戶發出HTTP請求 -> Controller接收 -> Service處理&#xff08;可能涉及數據庫操作、調用其他內部方法&#xff09;-> Controller返回HTTP響應。這個流程簡單直接&#xff0c;…

Obsidian和Ollama大語言模型的交互過程

之前的文章中介紹了Obsidian配合Ollama的使用案例&#xff0c;那么它們是如何配合起來的呢&#xff1f;其實這個問題并不準確&#xff0c;問題的準確描述應該是Obsidian的Copilot插件是如何與Ollama大語言模型交互的。因為Obsidian在這里只是一個載體&#xff0c;核心功能還是C…