计算机图形学入门12:纹理映射

1.问题

        如上图所示,前面的内容已经知道怎么对物体进行着色,在球和地板上出现了不同的颜色,也就是定义了不同的kd颜色系数,那么如何在物体不同位置定义不同属性呢?

2.纹理映射

2.1什么是纹理映射

        如上图球的表面贴上一张绘制了地图的二维图片,就变成了地球仪,这张二维的图片就是纹理(Texture),把这个图贴到球表面伴随着这纹理的放大缩小以及将纹理中的某个点和球上的某个点对应起来,这个过程就是纹理映射(Texture Mapping)。

2.2UV坐标

        那么怎么将纹理贴到物体表面呢?我们知道在三维空间中,最基本的是三角形,那么物体上的三角形怎么映射到纹理上,也就是说在纹理空间上在哪。

        在图形学中,每一个三角形都会分配一个坐标(u,v),叫做纹理坐标(UV坐标),这样就能知道三物体三角形如何映射到纹理上。不论贴图是正方向还是长方形,uv的取值范围都是[0,1]。如下图所示。

       这样就知道了三角形每个顶点都对应一个UV坐标。那么就可以将纹理的颜色对应到物体上,如下图所示。

2.3纹理平铺

        纹理可以应用到各种各样的物体表面,而且纹理映射不止使用一次。举个例子,如下图所示。

        将上图任何一点的纹理坐标显示出来,如下图所示,可以看到一块纹理在物体上重复使用,像贴瓷砖一样铺满了整个物体。也就是说不同模型位置可以映射到相同纹理。

        我们发现上图中重复纹理坐标中间有明显的缝,但是在场景中是正常的。这说明纹理本身设计边缘可无缝连接,这种方式叫做平铺(tiled)。如下图所示。

2.4如何读取纹理

        上述中提到着色时,可以获取到每一个顶点对应的纹理坐标,然后从纹理中取色。这样只是为了说明使用纹理的过程,例如处理一个三角形的纹理映射时,只知道三个顶点对应纹理坐标,那如何知道三角形内部任意一点对应的纹理坐标呢,答案是做插值,做插值时需要用到重心坐标

3.重心坐标

3.1为什么使用重心坐标

        使用重心坐标(Barycentric Coordinates)为了做三角形内的插值。三角形内部做插值是因为很多操作是在三角形顶点上完成和计算的,并且希望在三角形内部有一个平滑的过渡。在三角形顶点上可以定义各种属性,比如纹理坐标、颜色、法线向量等,所以这些属性也可以进行插值计算,也就是说可以对三角形任何属性进行插值。

3.2重心坐标的概念

        重心坐标是定义在一个三角形上的。如上图所示,三角形ABC,该三角形所在平面内任意一点(x,y)可以表示该三角形三个顶点坐标的线性组合,此时(α,β,γ)所表示的点就是该点(x,y)的重心坐标。A、B、C都是指坐标,如(xA,yA)、(xB,yB)。也就是说只要给定任意三个点,只要有一个点在三个点所在的平面上,都可以通过α+β+γ = 1
注意:
        1.α+β+γ = 1 是将所求的点限定在三角形所在的平面内。
        2. α、β、γ 的取值必须都大于0,满足都大于0可以将所求的点限定在三角形内。

求A、B、C的重心坐标

        既然在三角形平面任意一点都可以用线性组合表示,那么A点重心坐标是什么呢。

        如上图所示,当(α,β,γ)=(1,0,0)时,满足线性组合表示A点。所以A点重心坐标是(1,0,0)。同理可知B,C的重心坐标,B:(0,1,0)、C:(0,0,1)。分别求出了A、B、C的重心坐标,那么怎么求三角形上任意一点的重心坐标呢?

3.3计算重心坐标

3.3.1如何求重心坐标

        三角形上任意一点的重心坐标可通过面积比计算。如下图所示,A点对面的三角形AA,B点对面的三角形AB,C点对面的三角形AC。α、β、γ的值可以满足下图右侧公式,如α的值等于AA三角的面积除以三个三角形面积之和。β、γ的值同理

 3.3.2三角形重心的重心坐标

        由于三角形重心和三角形3个顶点组成的3个三角形面积相等,通过上述公式很容易得出,如下图所示。

3.3.3求三角形内任意一点的重心坐标

        我们知道两个向量叉乘的模等于两个向量围成的平行四边形面积,而三角形面积是平行四边形面积除以2,所以三角形的面积可以用叉乘求得,即可求出重心坐标。还有另外一种方法,下面给出一个已经推导的公式,可直接通过该公式来计算重心坐标,如下图所示。

3.4重心坐标做插值运算

        有了重心坐标后,就可以直接在三角形内部任何一点属性做插值。那么怎么做呢?

        重心坐标来做插值,那么做插值的属性同样也可以用重心坐标去线性的组合出来。假设三角形中V点的重心坐标为(α,β,γ)Va,Vb,Vc为三角形的三个顶点的坐标,就是三个属性,这时可以通公式V=αA + βB + γ*C来得到V点的坐标,也就是属性。这个属性可以是任何属性,比如颜色、法线、纹理坐标、深度值等等。

注意:
      
  投影变换前利用重心坐标插值和投影变换后插值结果是不一样的(重心坐标会变),插值运算是在三维空间中进行的,已经投影到屏幕上的坐标如何变回去?答案是利用投影矩阵的逆矩阵进行逆变换。

建议:

        三维空间的属性需在三维空间中完成插值,然后在映射到二维中去。

4.总结

        通过将三角形上对应纹理坐标,将纹理的颜色一一对应到三角形顶点上,然后通过插值计算出任何位置的颜色,再着色过程中将颜色作为着色模型的系数,这样就能完整的渲染出图像了。

        后续的章节,将会介绍纹理的应用以及遇到的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索Jetpack Compose中的高效导航库:Voyager项目

探索Jetpack Compose中的高效导航库:Voyager项目 在Jetpack Compose中实现高效、可扩展的导航是每个开发者的追求。Voyager作为一个多平台导航库,不仅与Jetpack Compose无缝集成,还提供了一套务实的API,帮助开发者创建单活动应用…

tvm实战踩坑

今天玩了一下tvm的安装 我要安装v0.14.0的版本 所以按照官网的方法 https://tvm.apache.org/docs/install/from_source.html#python-package-installation git clone --recursive https://github.com/apache/tvm tvmgit checkout v0.14.0recursive是很重要的 这一步可以替换成…

显卡GPU、CUDA、Pytorch版本对应即下载安装

显存大于4G的建议使用GPU版本的pytorch,低于4G建议使用CPU版本pytorch,直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持,需要先安装CUDA,即需要完成以下安装 1.查看显卡GPU支持的CUDA版本(最高&…

Flutter系列:关于ensureInitialized()

Flutter系列 关于ensureInitialized() - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28…

vue3 proxy对象转为原始对象

https://cn.vuejs.org/api/reactivity-advanced.html#toraw import { toRaw } from "vue";const foo {} const reactiveFoo reactive(foo)console.log(toRaw(reactiveFoo) foo) // true 人工智能学习网站 https://chat.xutongbao.top

18.9k star!一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务

大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(RDBMS)。 DuckDB是一个嵌入式的分析型数据库,它提供了高性能的数据分析和数据处理能力。DuckDB的设计目标是为数据科学家、分析师和数据工程师提供一个快速、灵活且易于使用的数据分析工…

『SD』场景变换魔法:InstructP2P控制类型助你一键换天气

本文简介 InstructP2P 控制类型是 ControlNet 插件中的一个强大功能,InstructP2P 的主要能力是实现场景转换,风格迁移。 我将绫波丽的形象从她原本身着机甲、在夜空下站着的场景,转换到春意盎然的环境中,四周环绕着绽放的花朵和嫩绿的新叶。…

如何基于Excel文件图形化从零建表并导入数据(以MySQL和SQLynx为例)

目录 1. 准备Excel数据 2. 导入Excel数据 a. 登录SQLynx b. 导入Excel文件 3. 验证数据 4. 使用和管理表 5. 总结 在实际的业务过程中,我们经常会有很多数据存储在Excel中,但在Excel中的数据分析不如使用SQL和数据库方便,数据量大些的…

蒂姆·库克解释Apple Intelligence和与ChatGPT合作的区别|TodayAI

在2024年全球开发者大会(WWDC 2024)上,苹果公司首席执行官蒂姆库克(Tim Cook)隆重介绍了公司的最新人工智能(AI)计划——Apple Intelligence,并宣布了与OpenAI的ChatGPT的合作。虽然…

大型语言模型(LLMs)是如何工作的?

大型语言模型(LLMs)如ChatGPT、Bing的“Sydney”模式和Google的Bard正在占据新闻头条。与其讨论它们将使哪些工作变得过时,本文将探讨这些模型的工作原理,包括它们从哪里获取数据以及使它们能够生成令人信服的真实文本的基本数学方…

【课程总结】Day8(上):深度学习基本流程

前言 在上一篇课程《【课程总结】Day7:深度学习概述》中,我们了解到: 模型训练过程→本质上是固定w和b参数的过程;让模型更好→本质上就是让模型的损失值loss变小;让loss变小→本质上就是求loss函数的最小值&#xf…

Postman接口测试工具详解(高清图例)

一、引言 1. 介绍接口测试的重要性 在当今软件开发领域,接口(API)已成为不同系统、服务或组件之间交互的桥梁。随着微服务架构的普及,接口的重要性日益凸显。然而,接口的复杂性和多样性也带来了诸多挑战,其…

【中间件】Pulsar集群安装

目录 一、Pulsar介绍 1.1 Pulsar基本介绍 1.2 Pulsar架构 Producer & Consumer Apache Zookeeper Pulsar Brokers Apache Bookkeeper 二、Zookeeper集群安装 三、Pulsar集群安装 3.1 bookie与broker配置 3.1.1 修改bookie配置文件 3.1.2 修改broker配置文件 3…

轮到国产游戏统治Steam榜单

6月10日晚8点,《黑神话:悟空》实体版正式开启全款预售,预售开启不到5分钟,所有产品即宣告售罄。 Steam上,《黑神话:悟空》持续占据着热销榜榜首的位置。 但在《黑神话:悟空》傲人的光环下,还有一款国产游戏取得出色的成绩。 6月10日&#…

32T存储删除视频的恢复方法

由于存储技术的发展和普及目前很多行业都开始使用小型存储,NAS可以通过网络进行数据上传和读取,使用极为方便。但是由于NAS设备容量较大且碎片较多,所以此类设备删除或者格式后恢复难度是比较大的,下边我们来分享下32T存储的恢复方…

Android面试题之ActivityManagerService的启动流程

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 SystemServer启动 创建SystemContex 用于加载系统相关的资源,比如theme,android命名空间下的资源等创建引导服务&#…

关于Ubuntu24.04嘉立创EDA无法启动的问题

关于Ubuntu24.04嘉立创EDA无法启动的问题 查看无法启动原因解决办法1解决办法2 查看无法启动原因 在终端使用启动文件命令报错 解决办法1 输入如下命令可以正常启动 ./lceda-pro --no-sandbox 解决办法2 找到desktop文件进行修改 cd /usr/share/applications sudo vim lce…

基于顺序表与链表的顺序查找(顺序表的折半查找)

内容 基于任意一个顺序表、链表&#xff0c;实现顺序查找算法&#xff1b;实现折半查找算法&#xff0c;并思考折半查找算法的适用场景&#xff1b; #代码实现 #include<iostream> #include <stdlib.h> using namespace std; #define MAX 20 #define datatype int…

JS手写题解析

手写Promise class MyPromise {constructor(executor) { // executor执行器this.status pending // 等待状态this.value null // 成功或失败的参数this.fulfilledCallbacks [] // 成功的函数队列this.rejectedCallbacks [] // 失败的函数队列const that thisfunction reso…

PCL 任意二维图像转点云

目录 一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 给定任意一张图片,通过代码操作将图片转成点云。图像中包含大量可用信息,其中必不可少的信息为像素坐标和像素值,将像…