【GAMES101】Lecture 12 曲面

2024-01-30 13:20
文章标签 曲面 lecture games101

本文主要是介绍【GAMES101】Lecture 12 曲面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

贝塞尔曲面

曲面细分

Loop细分(Loop Subdivision)

Catmull-Clark 细分(Catmull-Clark Subdivision)

曲面简化


贝塞尔曲面

然后前面讲了贝塞尔曲线,这里讲一下这个贝塞尔曲面

那怎么样从贝塞尔曲线到贝塞尔曲面的转换呢,前面我们说到这个逐段的贝塞尔曲线是通过四个控制点来画的,这里贝塞尔曲面是通过16个控制点来画的

把这16个控制点排列成4×4网格,那么每行或者每列是不是有四个控制点就可以画出一条贝塞尔曲线,这样就可以画出四条并列的贝塞尔曲线,然后比分说有这样一个平面从另一个方向上扫过去,是不是会和这四条线有四个交点,那这四个点是不是又可以画出一条贝塞尔曲线,这样是不是就可以用贝塞尔曲线布满整个曲面

具体来说,在时间u时可以确定四条贝塞尔曲线上的四个点对不对,然后在时间u上的时间v是不是可以通过u的四个控制点确定的贝塞尔曲线v时刻的点,这样通过(u,v)就可以确定曲面上任意一点的位置,这个贝塞尔曲面就可以画出来了

曲面细分

我们可以通过将组成物体的多边形继续细分成更多的多边形来使这个物体产生更多的细节或者表面更加光滑

Loop细分(Loop Subdivision)

这个loop细分是针对三角形的,而且这个loop是个人名,和循环没关系

loop细分就分两步,第一步将一个三角形拆分成多个三角形,第二步移动这些新生成的三角形

具体怎么做呢?第一步拆分三角形好做,直接连接各条边上的中点,这样一下子就可以一个变多个小三角形

问题在于如何移动这些新的三角形的位置对吧,其实就是如何移动这些三角形的顶点问题,我们把顶点分成两种,一种是旧顶点,就是原本三角形的三个顶点,另一种是新形成的顶点,就是原来三角形三条边上的中点,这两种顶点需要分开处理

对于新生成的顶点,那这个点它肯定在一条三角形边上,那一条边会有两个三角形共享,那就可以找出这四个顶点ABCD,中间的白点就是我们要移动的点,这个白点的位置就是周围这四个顶点的加权平均值,我们认为它和AB更接近一些,因此AB权值更大

对于旧顶点,它肯定会是多个三角形的顶点是不是,我们定义两个值n和u,这个n就是这个旧顶点的度,所谓顶点的度是指它连接了多少条边,这个u呢,如果n=3那么u=3/16,否则u=3/(8n),好,同样是周围这些顶点以及它本身的一个加权平均,对于自己的权值是1-nu,对于周围顶点的平均值的权值是u

这样我们先拆分三角形,然后移动三角形的顶点就可以实现这个loop细分

Catmull-Clark 细分(Catmull-Clark Subdivision)

然后我们的loop细分其实可以知道它只能用于三角形对不对,那对于这个普通网格多边形怎么办呢,这就是Catmull-Clark 细分做的事情

对于这么些多边形我们定义这个不是四边形的叫非四边形,然后顶点的度(就是连接的边数)不是4的顶点叫作奇异点,就像下面这个图有两个非四边形,有两个奇异点

然后对于这些多边形,我们给每个面添加上一个顶点,先不管它放哪,然后每条边取中点,连接所有顶点,然后就会变成这样,可以发现这样操作之后呢,非四边形就会消失,取而代之的是多了奇异点,而且消失的非四边形数等于增加的奇异点数

我们就通过这种方式来细分这个曲面

然后我们需要解决的问题就是如何移动新增加的这些点的位置 

依然我们将顶点分成几类处理,对于这个在面上增加的点f,它的值就是周围四个顶点的平均值,然后对于边的中点,它的值是上下两个顶点再加上两边f点的平均值

还有就是原来的旧顶点,是通过这样的加权平均计算

这样就可以实现这个Catmull-Clark 细分

曲面简化

我们可以通过减少使用的多边形数量来近似的表示原来的物体

因为很多时候我们不需要知道这个物体的细节,或者说我从很远的地方看它,本就无需细节

怎么实现这种简化呢,是通过边坍缩的方式实现的,所谓边坍缩,指的是,将某条边的两个顶点融合,这样这条边就消失了

这样的问题在于,我如何去挑选哪些边来消失呢,即哪些边是价值比较小的需要消失

这里是通过这个叫二次误差度量的衡量方式来比较的,对于一条边坍缩后我去计算融合后的顶点和周围顶点的距离的平方和,我去选取这个距离平方和最小的来进行坍缩

这里的距离平方和使用了堆进行存储

这篇关于【GAMES101】Lecture 12 曲面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660369

相关文章

GAMES101(5~6节,光栅化)

光栅化Rasterization 透视投影已知field和近平面,如何推导宽度? 根据三角函数:tan field / 2 = (height / 2) / ||n||近平面,从而可以求出高度 因为知道宽高比,所以可以求出宽度,高度 * 宽/高 视口变换 经过MVP变换,顶点位于正则化空间坐标,是一个在 [-1,1] ^3 之间的 x, y, z 坐标构成(标准立方体),我们下一步需要做

nurbs曲面和贝塞尔曲面的区别是什么

NURBS曲面和贝塞尔曲面的主要区别如下:   定义与理论基础:   NURBS曲面:全称非均匀有理B样条曲面,是NURBS曲线在二维空间上的扩展。它结合了非均匀性、有理性和B样条的特性,能够更灵活地表示复杂曲面。 贝塞尔曲面:通过Bernstein基函数的张量积为加权系数对控制顶点进行线性组合所构造的参数曲面。它具有良好的连续性和插值性质。   控制点的灵活性与局部性:   N

UG NX二次开发(C++)-获取曲面的相切曲面

文章目录 1、前言2、创建一个三维模型3、获取相切曲面的方法3、测试结果 1、前言 最近一段时间,QQ群中的群友总问我一个问题,那就是如何获取曲面的相切曲面,我今天就把这个方法写出来,以帮助读者。 在UG二次开发中,查询了帮助文档,没有找到获取相切曲面的函数。所以采用NXOpen来获取。如果有关于UG NX二次的疑问或者想学习UG NX二次开发技术,可以私信博主。 2、创建

Games101学习 - 线性代数综述

1. 叉积矩阵形式 叉乘矩阵形式通常在物理模拟中有运用,处理四元数旋转也类似这样的形式。 // 定义两个向量 A 和 BFVector A(1.0f, 2.0f, 3.0f);FVector B(4.0f, 5.0f, 6.0f);// 计算叉积FVector CrossProduct = FVector::CrossProduct(A, B);if (GEngine){GEngine

GAMES101图形学笔记1

一、图形学的应用 1.游戏渲染、光照 2.电影特效 3.面部、动作捕捉,如Avatar(阿凡达)中的面部捕捉 4.设计 建筑设计,汽车设计 5.虚拟现实VR 增强现实AR 6.数码插画 笔刷 PS软件等 7.模拟、仿真 8.GUI 界面设计等 9.字体设计typography 二、为什么学习图形学 1.图形学是一门Awesome的学科,能够创造很多有意思的东西,有意思的图像 2.了解并学习一

【流体力学】第二章 流体静力学,流体静压强及其特性,静止流体内压强分布,作用在平面和曲面上的流体压力(西北工业大学)

目录 第二章 流体静力学 2.1 流体静压强及其特性 一、基本概念 1.静压强     二、静压强的特性 2.2 静止流体平衡微分方程式​编辑 二、 平衡微分方程的积分     三、 等压面 2.3 重力场中静止流体内的压强分布 三. 位置水头、压强水头、测压管水头 四. 压强的度量单位 2.4 压强测量 一. 绝对压强、相对压强、真空 二. 测压原理 U形测压管

【UCB CS61C】Lecture 2 3 - C Basics

目录 C 语言的编译(Compilation)变量类型(Variable Types)字符(Characters) C 语言的类型转换(Typecasting)类型函数(Typed Functions) 结构体(Structs)成员的对齐与填充(Alignment & Padding)节省结构体对齐填充的空间 联合体(Unions)`main()` 函数True or False?指针(Po

B样条曲线曲面--拟合技术

B样条曲线曲面 1.B样条曲线 B样条曲线(B-spline curve)是一种在计算机图形学和计算几何中广泛使用的参数曲线。它是贝塞尔曲线(Bezier curve)的一种推广,提供了更好的局部控制能力。B样条曲线由一组控制点(也称为控制顶点)和一组基函数(称为B样条基函数)定义。 1.1.B样条曲线的定义 给定一组 ( n + 1 ) 个控制点 ( P i ) 和一组节点( k n

Bezier曲线曲面--拟合技术

Bezier曲线曲面–拟合应用 1.Bezier曲线 1.1.Bezier曲线的定义 给定一组控制点 P_0, P_1, …, P_n,其中 n 是曲线的阶数,Bezier曲线的参数方程可以表示为: B ( t ) = ∑ i = 0 n P i b i , n ( t ) , t ∈ [ 0 , 1 ] B(t) = \sum_{i=0}^{n} P_i b_{i,n}(t), \qua

有理B样条曲线曲面(NURBS)--拟合技术

非有理B样条曲线曲面(NURBS) 1.NURBS曲线 NURBS(Non-Uniform Rational B-Spline)曲线是一种在计算机辅助设计(CAD)和计算机图形学中广泛使用的数学表示方法,用于精确地定义和渲染复杂的曲线和曲面。NURBS曲线结合了B-Spline曲线和Bezier曲线的优点,提供了对曲线形状的精确控制以及对曲线几何和拓扑属性的灵活操作。 1.1.NURBS曲线