【纹理展开和纹理映射】

纹理展开和纹理映射

    • 1.Projective Urban Texturing (blender+opengl)
    • 2.Text2Tex (xatlas+pytorch3D)
    • 3.自己的理解
    • 4.纹理展开和纹理映射,它们可逆吗?

前言 :最近突然意识到纹理展开和纹理映射并非一个东西,遂进行了一些了解,认识浅薄,欢迎指正。

1.Projective Urban Texturing (blender+opengl)

这篇文章是用OpenGL来完成纹理映射,用Blender完成纹理展开的。

OpenGL和Blender是如何对应的呢?先来看看整体流程:
在Blender中导入或创建您想要纹理化的3D模型,并设置好相机位置和投影方式。
在Blender中对3D模型进行UV展开,生成一个空白的纹理地图,并保存为图片文件。
在OpenGL中加载3D模型和空白的纹理地图,并将它们绑定到一起。
在OpenGL中使用文章中提供的神经网络和纹理传播模块,根据您选择的真实城市风格,生成并更新纹理地图。

其中,在OpenGL中加载3D模型和空白的纹理地图,并将它们绑定到一起的具体步骤如下:

首先,您需要在OpenGL中加载3D模型。这可以通过使用OpenGL的顶点缓冲区对象(VBO)来完成。VBO是一种用于存储顶点数据的缓冲区对象,可以通过调用glGenBuffers、glBindBuffer和glBufferData等函数来创建和使用。

接下来,您需要在OpenGL中加载空白的纹理地图。这可以通过使用OpenGL的纹理缓冲区对象(TBO)来完成。TBO是一种用于存储纹理数据的缓冲区对象,可以通过调用glGenTextures、glBindTexture和glTexImage2D等函数来创建和使用。

然后,您需要将3D模型和纹理地图绑定到一起。这可以通过调用glBindTexture函数来完成。在调用该函数时,您需要指定要绑定的纹理单元和要绑定的纹理ID。

最后,您需要将纹理坐标传递给着色器程序。这可以通过使用OpenGL的顶点数组对象(VAO)来完成。VAO是一种用于存储顶点属性数据的缓冲区对象,可以通过调用glGenVertexArrays、glBindVertexArray和glVertexAttribPointer等函数来创建和使用。

2.Text2Tex (xatlas+pytorch3D)

3.自己的理解

在纹理展开和纹理映射之间,3D模型是它们之间的纽带。在预处理阶段,渲染出的2D灰模照片中的每个像素点都被映射到3D模型上。同时,在UV展开时,展开后的二维纹理图集中的每个像素点也与3D模型上的一个点一一对应。这样,在生成阶段,2D灰模照片生成的新图片就可以反向传回到3D模型中,然后再从3D模型上传入纹理图集。

纹理展开的作用是有一个地方可以保存生成的纹理,是一种存储形式,这样别人只需要拿到mesh和展开的纹理图集,就能得到带纹理的物体,否则存储纹理可能很费资源;而纹理映射,比如说做纹理生成任务,将渲染出来的灰模在2D上生成纹理后,需要反传回3D模型上,这时候需要计算一个对应函数,这就是纹理映射。

上面是简化的表述,例如二维纹理图和3d像素不能一一对应,用函数的映射来描述比较合适。

4.纹理展开和纹理映射,它们可逆吗?

UV展开可以被视为一个映射(Mapping)过程,它将三维模型表面上的点映射到了二维平面上的UV坐标。这个映射过程是单向的,它将三维坐标映射到了二维坐标,但是不能从二维坐标直接反推回三维坐标,因此UV展开不是一个逆函数。

纹理映射则是将二维纹理图像上的颜色信息映射到了三维模型表面上的过程。在这个过程中,每个顶点都有对应的UV坐标,指示了纹理图像上的位置。这个映射过程是将二维坐标映射到了三维坐标,但是在实际渲染时,使用的是UV坐标,而不是直接使用二维坐标。纹理映射的过程是可逆的,因为你可以根据UV坐标找到纹理图像上的颜色信息,然后将其映射回三维模型表面。

综上所述,UV展开是一个单向的映射过程,而纹理映射是一个可逆的映射过程。它们之间并不是严格的函数和逆函数关系,而是可以理解为映射和逆映射的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PHP]帮管客CRM客户管理系统 v5.1.0

帮管客CRM客户管理系统基于先进的CRM营销理念设计,集客户档案、销售记录、业务往来于一身,以凝聚客户关系、提升资源价值为核心,将潜在客户变为现实客户、从而提升销售量、提高用户的满意度,并增加企业竞争力。帮管客CRM是适用于中…

基于transformer的解码decode目标检测框架(修改DETR源码)

提示:transformer结构的目标检测解码器,包含loss计算,附有源码 文章目录 前言一、main函数代码解读1、整体结构认识2、main函数代码解读3、源码链接二、decode模块代码解读1、decoded的TransformerDec模块代码解读2、decoded的TransformerDecoder模块代码解读3、decoded的De…

《现代C++语言核心特性解析》笔记(一)

一、新基础类型(C11~C20) C基础类型回顾一览表 1. 整数类型 long long 我们知道long通常表示一个32位整型,而long long则是用来表示一个64位的整型。不得不说,这种命名方式简单粗暴。不仅写法冗余,而且表…

MuLogin浏览器如何在一台设备上安全登录和管理多个LinkedIn账户?

一、LinkedIn多个账户的用处 LinkedIn作为世界上最大的专业人士社交平台,具有许多有用的功能,对于个人和企业来说都非常重要。以下是多个LinkedIn账户的一些典型用途: 1. 分行业账户:如果您在不同的行业从事职业活动&#xff0c…

【多线程面试题二十二】、 说说你对读写锁的了解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说说你对读写锁的了解 …

华纳云:centos系统中怎么查看cpu信息?

在CentOS系统中,我们可以使用一些命令来查看CPU的详细信息。下面介绍几个常用的命令: 1. lscpu lscpu命令可以显示CPU的架构、型号、核心数、线程数、频率等信息。 # lscpu 执行以上命令后,会输出类似以下内容: 2. cat /proc/…

【C/C++】继承中同名成员处理方式

一、继承中同名成员处理方式 问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢? 访问子类同名成员 直接访问即可访问父类同名成员 需要加作用域 示例: class Base { public:Base…

Pinia和Vuex有什么区别?

Pinia和Vuex有什么区别? 在Vue.js应用程序中,状态管理是确保组件之间数据共享和通信的关键部分。两个主要的状态管理库是Pinia和Vuex。Pinia是一个相对较新的库,而Vuex则是Vue.js社区中使用最广泛的状态管理工具之一。 1. 简介 1.1 Vuex …

金蝶云星空表单插件获取日期控件判空处理(代码示例)

文章目录 金蝶云星空表单插件获取日期控件判空处理C#实现 金蝶云星空表单插件获取日期控件判空处理 C#实现 DateTime? deliveryDate (DateTime?)this.View.Model.GetValue("FApproveDate");//审核日期long leadtime 20;//天数if (!deliveryDate.IsNullOrEmpty()…

在IDEA运行spark程序(搭建Spark开发环境)

建议大家写在Linux上搭建好Hadoop的完全分布式集群环境和Spark集群环境,以下在IDEA中搭建的环境仅仅是在window系统上进行spark程序的开发学习,在window系统上可以不用安装hadoop和spark,spark程序可以通过pom.xml的文件配置,添加…

Java 的高性能缓存库-caffeine!

在项目中用到的除了分布式缓存,还有本地缓存,例如:Guava、Encache,使用本地缓存能够很大程度上提升程序性能,本地缓存是直接从本地内存中读取,没有网络开销。 今天给大家介绍一个高性能的 Java 缓存库 – …

C++设计模式_26_设计模式总结

本篇为C++设计模式的总结课,此篇再回到原帮助大家梳理一下。 文章目录 1. 一个目标2. 两种手段3. 八大原则4. 重构技法5. 从封装变化角度对模式分类6. C++对象模型7. 关注变化点和稳定点8. 什么时候不用模式9. 经验之谈10. 设计模式成长之路1. 一个目标 管理变化,提高复用!…

认证授权--越权访问测试用例

漏洞名称 越权访问 漏洞描述 越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能…

Angular组件生命周期详解

当 Angular 实例化组件类 并渲染组件视图及其子视图时,组件实例的生命周期就开始了。生命周期一直伴随着变更检测,Angular 会检查数据绑定属性何时发生变化,并按需更新视图和组件实例。当 Angular 销毁组件实例并从 DOM 中移除它渲染的模板时…

Ubuntu 使用 nginx 搭建 https 文件服务器

Ubuntu 使用 nginx 搭建 https 文件服务器 搭建步骤安装 nginx生成证书修改 config重启 nginx 搭建步骤 安装 nginx生成证书修改 config重启 nginx 安装 nginx apt 安装: sudo apt-get install nginx生成证书 使用 openssl 生成证书: 到对应的路径…

智能化的宠物喂食器解决方案

随着经济条件的不断改善,越来越多的家庭开始追求生活的便捷享受,于是喂食器开始走进千家万户,喂食器主要由储存食物的蓄食箱和传送食物的滑道构成,在外部框架的支撑下,一台喂食器才能正常进行工作,而宠物喂…

Day 50 动态规划 part16

Day 50 动态规划 part16 解题理解58372 2道题目 583. 两个字符串的删除操作 72. 编辑距离 解题理解 583 dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。 当word1[i -…

数据仓库与数据挖掘

1.数据挖掘的概念 数据挖掘(Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(Knowledge-Discovery in Databases,KDD)中的一个步骤。 数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中…

案例精选|聚铭综合日志分析系统夯实徐州公交集团网络环境基础

徐州市公共交通集团有限公司成立于1960年,现隶属徐州市交通控股集团有限公司,下辖7家运营公司,1家站务公司,8家直属单位及13个职能部室。运营车辆2364辆,线路177条,线路长度3560公里,日发送班次…

元素的水平居中和垂直几种方案

总结一下各种元素的水平居中和垂直居中方案。 水平居中: 1.行内元素水平居中 text-align: center 定义行内内容(例如文字)如何相对它的块父元素对齐;不仅可以让文字水平居中,还可以让行内元素水平居中 注意:给行内…