GAMES101笔记 Lecture 09 Shading3(Texture Mapping Cont.)

news2024/10/7 4:31:34

目录

      • Interpolation Across Triangles: Barycentric Coordinates(重心坐标)
        • Interpolation Across Triangles(三角形内的插值)
          • Why do we want to interpolate(我们为什么要在三角形内插值)
          • What do we want to interpolate?(我们想插值得到什么?)
          • How do we interpolate? (我们如何插值呢?)
        • Barycentric Coordinates(重心坐标)
        • Using Barycentric Coordinates(利用重心坐标)
      • Applying Textures(应用纹理)
        • Simple Texture Mapping: Diffuse Color(简单的纹理映射:漫反射颜色)
        • Texture Magnification(纹理放大)
          • What if the texture is too small?(纹理太小了怎么办?)
          • Bilinear interpolation(双线性插值)
          • What if the texture is too large? (纹理太大了怎么办?)
        • Mipmap (支持快速,近似,方形的范围查询)
      • 参考资源

Interpolation Across Triangles: Barycentric Coordinates(重心坐标)

Interpolation Across Triangles(三角形内的插值)

Why do we want to interpolate(我们为什么要在三角形内插值)
  • 我们知道三角形顶点的属性
  • 希望在三角形内部每个点得到一个值,并且从一个点到另一个点是一个平滑的过渡。
What do we want to interpolate?(我们想插值得到什么?)
  • 纹理坐标,颜色,法向量 …
How do we interpolate? (我们如何插值呢?)

通过重心坐标

Barycentric Coordinates(重心坐标)

重心坐标是针对三角形的,每个三角形可以定义一套重心坐标,换一个三角形就是另外一套重心坐标了。

在三角形 A B C ABC ABC形成的平面内的任何一个点,都可以表示成如下形式:

( x , y ) = α A + β B + γ C (x, y) = \alpha A + \beta B + \gamma C (x,y)=αA+βB+γC

其中 α + β + γ = 1 \alpha + \beta + \gamma = 1 α+β+γ=1

用这三个系数来描述一个点。

如果这个点在三角形内部,还需要满足另外一个条件:

这三个系数均非负

在这里插入图片描述

举例:

A A A的重心坐标是什么?

( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)

求任意一个点的重心坐标方法:

利用面积比
在这里插入图片描述
三角形自己的重心的重心坐标是多少?

( 1 3 , 1 3 , 1 3 ) (\frac{1}{3}, \frac{1}{3}, \frac{1}{3}) (31,31,31),因为重心有一个很好的性质,将其分别于 A A A, B B B, C C C三个点连边,可以把三角形均等地分成3个面积相等的部分。

因此,重心的重心坐标就是 ( 1 3 , 1 3 , 1 3 ) (\frac{1}{3}, \frac{1}{3}, \frac{1}{3}) (31,31,31)

更简便的计算重心坐标的方法:

在这里插入图片描述

Using Barycentric Coordinates(利用重心坐标)

去算任意一个点的值,线性插值。

在这里插入图片描述

注意:投影之后的计算的重心坐标和原始计算出的重心坐标是不同的,这就启发我们,在计算三维空间中的属性时,需要保持在三维空间中计算。

Applying Textures(应用纹理)

Simple Texture Mapping: Diffuse Color(简单的纹理映射:漫反射颜色)

对于屏幕上的每个像素 ( x , y ) (x, y) (x,y),计算出它的纹理坐标 ( u , v ) (u, v) (u,v),从纹理图中获取这个点的颜色,然后给这个像素赋予这个颜色。

在这里插入图片描述

Texture Magnification(纹理放大)

What if the texture is too small?(纹理太小了怎么办?)

纹理太小了会出现什么情况?

计算得到的纹理坐标是一个非整数的值,可以直接将其四舍五入进行计算。

但是这样操作的话,很多个像素(pixel)会被映射到同一个texel(纹理元素)上。

在这里插入图片描述

Bilinear interpolation(双线性插值)

对于每四个texel,我们可以进行一次双线性插值,这样计算的结果更加准确:

在这里插入图片描述
水平做了一趟插值,竖直做了一趟插值,因此叫做双线性插值。

What if the texture is too large? (纹理太大了怎么办?)

例如:出现了摩尔纹

在这里插入图片描述

原因:

近处的像素覆盖较少的区域,远处的像素覆盖较大的区域。

在这里插入图片描述
超采样可以很好的解决这种问题,但是代价太高了,算法会变的特别慢。

思考一下,有没有方法可以帮助我们快速得到一个范围内的平均值?

Mipmap (支持快速,近似,方形的范围查询)

首先,预处理这些级别的纹理图:
在这里插入图片描述
总存储量是原来的 4 3 \frac{4}{3} 34

计算一个像素在纹理图中占据的大小:

考虑四个相邻的点,将其映射到纹理中,得到它们的纹理坐标,计算出一个最大的边长,将其视作正方形的边长。

在这里插入图片描述
假如这个正方形的边长是4,那么我们就可以知道这个区域在 D = 2 D = 2 D=2的时候就会变成一个像素。

我们就可以去查那个像素,就可以立即得到这个区域的平均值。

但是这样操作,可能会出现不连续的情况。

在这里插入图片描述
解决方法:插值

三线性插值:

先在层内部进行双线性插值,再在层与层之间再做一次线性插值。

总共做了三趟插值,所以叫做三线性插值

在这里插入图片描述
缺点:MipMap在远处的时候,会出现糊掉的情况(Overblur):
在这里插入图片描述
解决方法:各向异性过滤

预处理出来,水平和竖直方向分别压缩的情况:这样就可以得到一个矩形的平均值,而不仅仅限制于一个正方形区域。

在这里插入图片描述

但是针对某些特殊情况,例如斜着的长条举行,各向异性过滤仍然不能很好地解决:

在这里插入图片描述
另一种解决方法:EWA过滤:

通过分解成多个椭圆来进行查询

缺点是需要多次查询
在这里插入图片描述

参考资源

GAMES101 Lecture 09

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

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

相关文章

vue echarts k线图 子功能设置

1 图中自定义选择区间, 手动鼠标拉取区间显示 2 底部数据选择条 dataZoom: [{type: inside,xAxisIndex: [0, 1],start: 98,end: 100},{show: true, // 这个是打开数据 选择条xAxisIndex: [0, 1],type: slider,top: 85%,start: 98,end: 100}], 3 鼠标在 k线图 选择区域 显示 的…

短视频抖音账号矩阵系统源码开发者自研(三)

一、站在开发者角度布局开发本套体系系统 开发技术新的方向。通过持续的技术创新和用户需求分析,我们将更加注重个性化开发本套短视频矩阵源码系统,目前市面上涵盖的基本功能有视频剪辑、绑定发布、智能回复、数据统计等一些基本的功能。此外我们在开发…

El-table 懒加载表格中新增、删除遇到的问题

前言 我是用的版本是: 官方给的例子中只是一个单纯的展示,但实际需求中可能会有一些其他需求,比如新增、修改。 然后遇到了各种问题,因此记录一下。 记录 :tree-props"{ children: children, hasChildren: hasChildren }…

NumPy怎样使用花式索引或布尔索引访问元素?

除了整数索引之外,NumPy中还提供了两个形式比较复杂的索引——花式索引和布尔索引,下面对这两种索引的基本用法进行详细的讲解。 1.花式索引 花式索引指以整数组成的数组或列表为索引。当使用花式索引访问一维数组时,程序会将花式索引对应的…

音视频基础 - YUV和RGB

1. 音视频名词概念 1.1 像素 像素是一张图片的基础单位,pixel,简称px 无数个像素组合在一起,就形成了一张图片。 1.2 分辨率 分辨率 垂直像素*水平像素,(理论上) 图像的分辨率越高,图像就越清晰。 比如下面左边这张…

【链表OJ】链表的回文结构

⭐️ 往期相关文章 💫链接1:链表分割 💫链接2:链表中倒数第k个结点(快慢指针问题) 💫链接3:leetcode 876.链表的中间结点(快慢指针问题) 💫链接4:leetcode 206.反转链表 &#x1f4…

游游画U(秒用c++ string函数)

看到这道题&#xff0c;第一反应是简单的模拟&#xff0c;上手就写&#xff0c;后来看大佬代码&#xff0c;还是我太蠢了 我的&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL;int main() {int n;cin>>n;string s ""…

【Spark】RDD转换算子

目录 map mapPartitions mapPartitionsWithIndex flatMap glom groupBy shuffle filter sample distinct coalesce repartition sortBy ByKey intersection union subtract zip partitionBy reduceByKey groupByKey reduceByKey 和 groupByKey 的区别 a…

kafka的broker和replica和文件存储

zookeeper中存储的kafka信息 /brokers/ids&#xff0c;记录存在的服务器id/brokers/topics/test/partitions/0/state&#xff0c;记录leader和可用副本服务器/comsumers&#xff0c;0.9版本之前存储消费者的offset信息&#xff0c;但是会产生zookeeper和broker的跨节点通信/co…

SPSS读取数据文件(一)

1.读取Excel数据文件 &#xff08;1&#xff09;选择“文件”-“打开”-“数据”,在弹出的“打开数据”对话框下选择Excel文件&#xff0c;如图所示 &#xff08;2&#xff09;选择要打开的Excel文件&#xff0c;点击“打开”&#xff0c;如图所示 &#xff08;3&#xff09;可…

[论文总结]YOLO v1、YOLO v2、YOLO v3、YOLO v4、YOLOv5

背景 在这里我们主要介绍YOLO 系列的相关目标检测算法&#xff0c;从最开始的YOLO v1 一直到 YOLO v5。本文也借鉴了其他文档和原始论文。总结下来这五个方法的演进线路如下表格所示。 对比维度YOLO v1YOLO v2YOLO v3YOLO v4YOLO v5backboneVGGdarknet19darknet53darknet53da…

Lua学习笔记:浅谈对垃圾回收的理解

前言 本篇在讲什么 Lua的垃圾回收 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f…

Unity:sentinel key not found (h0007)

SSD换电脑&#xff0c;unity 编辑器无法打开&#xff1b; 具体步骤&#xff1a; 删除这个路径下的文件 C:\ProgramData\SafeNet 下 Sentinel LDK 打开Windows 的Cmd 命令行&#xff0c;输入编辑器版本下Unity.exe的路径&#xff0c; CD E:\Dev_Env\Unity\Hub\Editor\2020.3.3…

如何将 arduino-esp32 库作为 ESP-IDF 组件使用?

相关文档 arduino-esp32 SDKESP-IDF SDKESP-IDF 软件环境搭建说明Arduino 软件环境使用说明Arduino as an ESP-IDF component &#xff08;官方说明&#xff09; 环境准备 目前&#xff0c;最新 Master 版本的 arduino-esp32 SDK 要求使用 v4.4 版本的 ESP-IDF SDK 软件编译环…

05、Nginx反向代理

一、网关、代理与反向代理&#xff1a; 在Nginx中&#xff0c;网关、代理和反向代理是三种常见的功能&#xff0c;用于转发和处理请求。下面是它们的简要介绍&#xff1a; 网关&#xff08;Gateway&#xff09;&#xff1a; 网关在网络通信中起到中介的作用&#xff0c;将客户…

【视觉SLAM入门】1. 基础知识,运动观测,旋转(旋转矩阵,轴角,欧拉角,四元数)和eigen库基础

"山薮藏疾" 1. 运动与观测1.1 通用运动方程1.2 通用观测方程1.3 对SLAM的认识 2. 三维运动2.1 旋转与平移2.2 变换矩阵2.3 矩阵知识补充2.4 旋转向量2.5 欧拉角2.6 四元数2.7 其他变换 3. 编程基础3.1 链接库说明3.2 eigen库 注&#xff1a; 以后的方程中如未说明&am…

面试官:一千万的数据,要怎么查?

一个老生常谈的问题&#xff0c;SELECT *和SELECT具体字段那个快&#xff1f;在数据量少的时候可能没什么差别&#xff0c;但是数据量达到千万级&#xff0c;差距就显现出来。废话不多说&#xff0c;往下看 ↓。 SELECT * 和 SELECT 具体字段的区别 在 MySQL 中&#xff0c;SE…

批量规范化

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点&#xff0c;生活更加美好&#xff01;”&#x1f308;&#x1f308;&#x1f308; 目录 1.批量规范化基本原理 2.批量规范化的使用 2.1对于全连接层 2.2对于卷积层 3.代码实现 3.1方式一 …

26488-24-4,Cyclo(D-Phe-L-Pro),具有良好的生物相容性

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 Cyclo(D-Phe-L-Pro)环(D-苯丙氨酸-L-脯氨酸)&#xff0c;环二肽是由两个氨基酸通过肽键环合形成&#xff0c;是自然界中小的环状肽。由于其存在两个酰胺键即四个可以形成氢键的位点&#xff0c;环二肽可以在氢…

商业海外社交媒体营销10步指南 [2023]

如今&#xff0c;社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品&#xff0c;而是必需品。全球有超过 36 亿人使用社交媒体&#xff0c;它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…