当前位置: 首页 > news >正文

【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.xdnf.cn/news/113167.html

相关文章:

  • MCU通信接口技术解析:UART、SPI与I2C
  • 【云计算】云计算中IaaS、PaaS、SaaS介绍
  • 基于 springboot+vue+elementui 的办公自动化系统设计(
  • 系统与网络安全------弹性交换网络(3)
  • Unity MR开发:探索混合现实的无限可能 (VisionPro和HoloLens 2 对比)
  • 【KWDB 创作者计划】_上位机知识篇---Github
  • 虚拟机详解
  • 第十天 Shader编程:编写简单表面着色器 Addressable资源管理系统 DOTS(面向数据技术栈)入门
  • 计算机网络学习笔记
  • Rust实现高性能目录扫描工具ll的技术解析
  • java面向对象编程【基础篇】之基础语法
  • 【产品经理从0到1】Axure介绍
  • Windows申请苹果开发者测试证书Uniapp使用
  • 基于 Spring Boot 的银行柜台管理系统设计与实现(源码+文档+部署讲解)
  • C语言之阶乘2.0
  • 区块链技术:深入共识算法、智能合约与DApps的架构奥秘
  • JAVA设计模式——(五)享元模式(Flyweight Pattern)
  • 快速配置linux远程开发-go语言
  • Web3中心化交易所钱包-批量地址生成业务
  • 测试基础笔记第十一天
  • 第十四届蓝桥杯省B.砍树
  • 如何创建极狐GitLab 议题?
  • 膳食营养诊断活动:科技赋能,共筑全民健康新基石
  • Langchain+RAG+向量数据库
  • GitHub万星项目维护者分享:开源协作的避坑指南
  • C++ 日志系统实战第二步:不定参数函数解析
  • 深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
  • 手撕C++STL list:深入理解双向链表的实现
  • 解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站