三角形重心坐标插值法 Interpolation Across Triangles: Barycentric Coordinates

news2024/9/22 17:28:20

  本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记。内容中如有错误,或有其他建议,欢迎大家指出。

附上GAMES101计算机图形学课程:GAMES101: 现代计算机图形学入门正在上传…重新上传取消https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html正在上传…重新上传取消https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html​编辑https://sites.cs.ucsb.edu/~lingqi/teaching/games101.htmlicon-default.png?t=N7T8https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibiliGAMES101-现代计算机图形学入门-闫令琪共计23条视频,包括:Lecture 01 Overview of Computer Graphics、Lecture 02 Review of Linear Algebra、Lecture 03 Transformation等,UP主更多精彩视频,请关注UP账号。正在上传…重新上传取消https://www.bilibili.com/video/BV1X7411F744正在上传…重新上传取消https://www.bilibili.com/video/BV1X7411F744​编辑https://www.bilibili.com/video/BV1X7411F744icon-default.png?t=N7T8https://www.bilibili.com/video/BV1X7411F744

三角形重心坐标插值法是什么

先来个gpt的回答

三角形重心坐标插值法是一种在计算机图形学中常用的技术,它允许我们在三角形内部平滑地插值顶点的任何属性,如位置、纹理坐标、颜色、法线、深度和材质属性。这种方法基于重心坐标,这是由三角形的三个顶点定义的坐标系统。

在三角形的重心坐标系统中,三角形上的任意一点 ( p ) 可以表示为三个顶点 ( A ), ( B ), 和 ( C ) 的线性组合:

p=w1​⋅A+w2​⋅B+w3​⋅C

其中,( w1 ), ( w2 ), 和 ( w3 ) 是权重系数,它们满足以下条件:

w1​+w2​+w3​=1

并且每个系数都是非负的。当这些条件满足时,点 ( p ) 就位于三角形内部。这些权重系数代表了点 ( p ) 相对于三角形顶点的位置。

例如,如果我们有三角形顶点的颜色 ( C1 ), ( C2 ), 和 ( C3 ),那么内部点 ( p ) 的颜色 ( Cp ) 可以通过以下方式插值得到:

Cp​=w1​⋅C1​+w2​⋅C2​+w3​⋅C3​

-----------------------------------------------------------------------------------------------------------------------------

为什么要做插值

在计算机图形学中,我们经常需要对三角形内部的内容进行填充。比如着色阶段,我们需要得到三角形内部的各个像素位置的法向量,纹理映射时需要得到三角形内部像素对应在纹理贴图上的哪一个uv区域,还有得到顶点颜色,我们要在三角形内部平滑地过渡这三个颜色。这都需要用插值的方法。

我们为什么要插值?
•指定顶点处的值
•获得三角形间平滑变化的值
我们想要插值什么?
•纹理坐标、颜色、法线向量…

怎么做插值

所谓插值,可以理解为我们小学常做的数学题,找规律。比如:在0~10中间填入4个数字。那就是2,4,6,8;

这里我们需要做的比小学数学题难,我们需要对二维的三角形内部空间做插值。我们就需要引入一个辅助点——叫三角形重心坐标。

三角形重心坐标

重心是物理学中的一个概念,指的是一个物体上所有质量的平均位置,也就是物体受到重力作用时所有质量元素所受重力的合力作用点。在均匀重力场中,无论物体处于何种方位,其重力总是通过这一点。对于形状规则且质量分布均匀的物体,重心通常位于几何中心。例如,一个均匀的直棒的重心就在其长度的中点,一个圆的重心就在圆心。

在三角形中,有一个点,将这个点与三角形的三个顶点连接,能将三角形分为三个小的三角形,且这三个三角形的面积相等。这个点就是三角形的重心。

在三角形中,重心是三条中线的交点,也就是连接三角形每个顶点和对边中点的线段相交的点。

在三角形中,三角形内部的任何一个点都可以表示为由三角形的三个顶点A,B,C的的线性组合(左图),该线性组合需要满足系数α,β,γ加起来一定等于1,α,β,γ都是非负数。

比如对于A点的坐标,用这个线性组合表示就如右图

对于三角形内部的任何一点,我们都可以连接这个点到各个订单得到三个三角形。三角形的每个顶点对面都有一个小三角形。比如A点对面是三角形AA,B点对面是AB, C点对面是AC。

α系数的值就是A点对面的三角形AA的面积除以总的三角形的面积;

β和γ同理。

于是因为三角形重心可以将三角形分为面积相等的三个三角形。所以我们就可以得到三角形的重心点的α,β,γ值都是1/3。那么比如我们要在重心位置插值出该点的颜色,就是1/3A点颜色+1/3B点颜色+1/3C点的颜色。

那么我们要得到三角形内部任意一个点的属性插值,就只需要知道α,β,γ的值,通过配比A,B,C三个顶点的属性值就行。

α,β,γ求值的公式见下图。

 需要注意的是,在透视投影变换后,三角形的形状会发生变化,同样,重心位置也会发生变化。投影后相同的三个系数值,无法对应到原三角形的同系数值的位置上。或者说,同一个点在投影后,位置会发生改变,α,β,γ会发生改变。
在三维空间中的属性要在三维空间中做好插值再透视投影到二维空间中去。但是光栅化过程中,三角形内部像素的一些属性插值必须发生在透视投影变换后。那么:

我们要做透视校正插值 (Perspective-Correct Interpolation)。

对于逆投用变换再变换回2d的方法去做三维空间的插值会消耗比较多的性能。所以我们使用另一个透视校正插值的方法。透视校正插值会使用投影后的插值系数的倒数之间的线性关系来计算属性值。

这里我直接给出计算深度属性Z的一个透视校正插值公式(计算其他属性也是一样的):

其中Z,Z_A,Z_B, Z_C 都是3D空间中的属性,α’,β’,γ’是2D屏幕上的配比参数。

 对比普通的三角形重心线性插值,对于在2D空间求3D空间属性的透视校正插值刚好每一个顶点参数都是普通的三角形重心线性插值顶点属性的倒数,结果属性也是倒数。So Amazing!!!!。

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

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

相关文章

Django日志(二)

一、Handler Handler决定如何处理logger中的每条消息。它表示一个特定的日志行为,例如 将消息写入屏幕、文件或网络Socket handler对应的是个字典,每一个键都是一个handler的名字,每个值又一个字典,描述了如何配置对应的handler实例 2.1、内置Handler class(必需):处理…

【每日八股】Java基础经典面试题4

前言:哈喽大家好,我是黑洞晓威,25届毕业生,正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结🥰。 本篇文章记录的Java基础面试题,如果你也在复习的话不妨…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二:多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇:Scikit-Learn逻辑回归(一) 上篇中,我们详细介绍了逻辑回归的概念、原理…

第六十一回 放冷箭燕青救主 劫法场石秀跳楼-编译安装飞桨paddlepaddle@openKylin+RISCV

卢俊义在水里被张顺抓住,用轿子抬到了梁山。宋江等人下马跪在地上迎接,请他坐第一把交椅。卢俊义宁死不从,大家只好说留他在山寨几天,先让李固带着马车货物回去。吴用对李固说,你的主人已经答应坐第二把交椅了&#xf…

matlab实现Logistic回归

一、目的和要求 1.编程实现Logistic Regression并应用于数据集; 2.绘制二元分类函数、sigmoid函数和代价函数; 3.正则化logistic回归代价。 二、算法介绍 步骤: 选择一个合适的分类函数来实现分类(Sigmoid函数) …

OpenHarmony开发之图形UI组件解析

简介 图形UI组件实现了一套系统级的图形引擎。 该组件为应用开发提供UIKit接口,包括了动画、布局、图形转换、事件处理,以及丰富的UI组件。 组件内部直接调用HAL接口,或者使用WMS(Window Manager Service)提供的客户端与硬件交互&#xff…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…

哪些企业适合构建企业新媒体矩阵?

⭐关注矩阵通服务号,探索企业新媒体矩阵搭建与营销策略 新媒体矩阵就是在某个平台或多个平台开设、联动多个账号,组建有关系的不同账号集群。 在数字化转型的浪潮下,矩阵已然成为企业实现品牌塑造、市场开拓与用户互动的重要阵地。 然而&…

算法沉淀——贪心算法六(leetcode真题剖析)

算法沉淀——贪心算法六 01.坏了的计算器02.合并区间03.无重叠区间04.用最少数量的箭引爆气球 01.坏了的计算器 题目链接:https://leetcode.cn/problems/broken-calculator/ 在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作&#xff1…

FPGA 实现CRC-8/ROHC(已验证)

1 FPGA crc代码在线生成工具 工具1 // vim: ts=4 sw=4 expandtab// THIS IS GENERATED VERILOG CODE. // https://bues.ch/h/crcgen // // This code is Public Domain. // Permission to use, copy, modify, and/or distribute this software for any // purpose with or wi…

C# 读取二维数组集合输出到Word预设表格

目录 应用场景 设计约定 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 DataSet转二维数组 导出写入WORD表格 调用举例 小结 应用场景 存储或导出个人WORD版简历是招聘应用系统中的常用功能,我们通常会通过应用系统采集用户的个人简历信息…

网络通信——IP地址、端口号、协议(TCP、UDP)

通信架构 网络通信三要素 IP地址 IPv4地址 IPv6地址 IP域名 IP常识 端口号 概念 协议 开放式网络互联标准:OSI、TCP/IP 传输层的2个通信协议——UDP、TCP TCP协议:三次握手建立建立可靠连接 进行三次握手的原因:为了确保客户端和服务端…

jsp学习

1.新建文件&#xff0c;创建web动态项目 2.项目点击next两下&#xff0c;点击勾选gentear&#xff0c;点击finish 3.文件成功后是有jsp文件 4.在webapp新建jsp文件 5. 使用模板html5建立文件 <% page language"java" contentType"text/html; charsetUTF-8&qu…

【Flutter学习笔记】10.2 组合现有组件

参考资料&#xff1a; 《Flutter实战第二版》 10.2 组合现有组件 在Flutter中页面UI通常都是由一些低级别组件组合而成&#xff0c;当我们需要封装一些通用组件时&#xff0c;应该首先考虑是否可以通过组合其他组件来实现&#xff0c;如果可以&#xff0c;则应优先使用组合&…

Redis中的过期键删除策略

过期键删除策略 概述 数据库键的过期时间都保存在过期字典中&#xff0c;并且知道根据过期时间去判断一个键是否过期,剩下的问题是&#xff1a;如果一个键过期了&#xff0c;那么它什么时候会被删除呢? 这个问题有三种可能的答案&#xff0c;它们分别代表了三种不同的删除策…

阿里云国际该如何设置DDoS高防防护策略?

DDoS高防提供针对网络四层DDoS攻击的防护策略设置功能&#xff0c;例如虚假源和空连接检测、源限速、目的限速&#xff0c;适用于优化调整非网站业务的DDoS防护策略。在DDoS高防实例下添加端口转发规则&#xff0c;接入非网站业务后&#xff0c;您可以单独设置某个端口的DDoS防…

专题三 - 二分 - leetcode 704. 二分查找 | 简单难度

leetcode 704. 二分查找 leetcode 704. 二分查找 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 704. 二分查找 | 简单难度 1. 题目详情 给定一个 n 个元素有序的&#xff08;升序&#x…

3.3网安学习第三阶段第三周回顾(个人学习记录使用)

本周重点 ①渗透测试介绍 ②sqlmap注入扫描工具 ③XSS脚本注入 本周主要内容 ①渗透测试介绍 一、渗透测试 通过模拟黑客对系统进行攻击的手段或技术&#xff0c;在被测系统中发现漏洞的行为。除了提供漏洞之外&#xff0c;还需提供安全意见。 与黑站不同&#xff0c;渗…

仿牛客项目Day10——统一异常处理、记录日志

统一异常处理 在controller里创建advice包&#xff0c;创建ExceptionAdvice类 这个注解括号里面是指只扫描被Controller标注的bean 请求request、响应response、异常exception 普通请求和异步请求的区别在于传的是json还是html吗&#xff1f; 统一记录日志 面向切面编程&…

2024/03/21(网络编程·day7)

一、思维导图 二、 //定义删除函数 int do_delete(sqlite3 *ppDb) {int del_numb0;printf("请输入要删除的学生的学号:");scanf("%d",&del_numb);getchar();//准备sql语句char sql[128]"select *from Stu";sprintf(sql,"delete from …