当前位置: 首页 > news >正文

计算机图形学Games101笔记--几何

第二部分:几何

几何介绍

光栅化解决如何渲染,几何研究模型如何存储在GPU的内存中。几何主要分为两种:隐式几何和显式几何

**隐士几何:**用点之间的关系存储,如球的计算公式。更一般的可以用f(x,y,z)。我们可以令f为0来判断某个点是否在某个表面上。但很难找出表面上的所有点

**显式几何:**把所有面上的点都给出或者通过参数映射的方式。比如平面到三位的映射,我们只需要遍历平面上的所有点即可得到三位模型表面的所有点。但是不容易判断某个点是否在表面。

隐式表示

**描述复杂模型:**我们可以用简单几何的交并差来构建复杂形体(显式几何)

**距离函数表示:**用点到面的距离函数表示几何形体。距离等于0的点则位于表面。距离函数表示可以很容易获得两个物体融合的形体。我们可以用距离函数的融合来表示物理的融合过程。工程中,我们可以用水平集的方式表示距离,通过插值的方式找到距离等于0的点。

在这里插入图片描述

显式几何表示

**点云 point Cloud: **用不同算法把点云变成不同的面

**多边形面Polygon Mesh:**特别是三角形面。下面的文本文件定义了8个顶点和6个法线;24个纹理坐标,每个点的纹理坐标,中间可能涉及到公用;f定义三角形,a/b/c表示三角形每个点的顶点坐标,纹理坐标和法线坐标。
在这里插入图片描述

曲线

贝塞尔(Bezier)曲线

定义:可以被认为通过参数定义,所以是显式定义的曲线

计算方法Definitely Casteljau Algorithm

核心思想:通过找某个时刻的点画出最终曲线。

quadratic Bezier二次贝塞尔曲线的计算方法
在这里插入图片描述

其他贝塞尔曲线进行递归计算即可。

在这里插入图片描述

计算方法相当于把四个控制点的坐标用伯恩斯坦多相似的系数加权线性组合起来。

在这里插入图片描述

性质:

  1. 放射变换不变性,对控制点做仿射变换后再计算新的曲线。
  2. 起点的切线一定是起点沿着第二个控制点的方向,终点的切线一定是倒数第二个点和倒数第一个点的连线方向。
  3. 投影变化曲线会发生变化!!
  4. 凸包性质:贝塞尔曲线一定在控制点的凸包内

**分段贝塞尔曲线:**每4个控制点画一个贝塞尔曲线。为了保证不同贝塞尔曲线组成一个光滑的曲线,每个曲线的起点的切线和前面曲线的终点的切线共线且大小相等(c1连续,c0连续只要有共点即可):

splines样条曲线

一个可控的曲线

一种连续曲线,其构造是为了通过一组给定的点并有一定数量的连续导数。

B样条(B-splines)曲线:

又叫做basis splines,绘制起来需要比贝塞尔曲线更多的信息,拥有贝塞尔曲线所有的重要性质

11-6-2Bezier曲线曲面第一节_哔哩哔哩_bilibili

曲面

贝塞尔曲面

可以按双线性插值的思维理解:把空间控制点分组,每组可以画出一个曲线,在把不同时刻的不同曲线上的点看作控制点再画出一个曲线。

三角形网格操作

  1. Mesh subdivision //引入更多三角形,使得模型变得更加光滑
  2. mesh simplification
  3. Mesh regularization //把三角形尽可能变为正三角形

Subdivision

**Loop Subdivision:**把三角形才分为4个(连接三边中点)。分为新旧两种顶点。

==新顶点操作:==找到每个新顶点的相邻4个顶点(共线的两个顶点,和共线的两个三角形的其他顶点)。对这4个顶点做一个加权平均。

==旧顶点操作:==用它周围其他顶点和自身顶点来更新坐标,同时考虑到了旧节点的度。

**Catmull-Clark Subdivision (General Mesh)卡特姆尔克拉克:**更加一般的情况,不要求原图形是三角形。

对于每一个区域的细分,找到该区域的中心点和每个边的中心点,把这些点连接起来。该方法引入了一个奇异点(度不等于4的点)概念,只有第一次细分的时候有可能会增加奇异点(相当于把三角形变成了奇异点)。

==面的中心点:==它周围点的加权平均值

==边的中心点:==它周围点的加权平均值

==旧的顶点:==考虑度情况下的周围点加权平均值。

Simplification

不同情况下用不同精度的模型。

不同高精度模型切换的时候如何平滑过度。

**Coilapsing An Edge边坍缩:**把一些边去掉,并且顶点替代。

==坍缩哪些边?==用Quadric Error Metrics(二次误差度量)来确定代表点。坍缩的时候可能会影响其他边的二次误差度量。因此需要动态更新,采用小根堆的形式,每次取最小后动态更新一下和他相关的数据。

二次误差度量:新顶点到先前相关三角形平面的平方和。

具体步骤:

  1. 对于每个点的坍缩,我们计算它不同数量周围点的二次误差,选择最小的二次误差作为该边的坍缩二次误差。
  2. 对于所有的边,我们对二次误差进行排序,每次坍缩二次误差最小的边,并且重新计算受影响边(与该边相连的边)的二次误差。

http://www.xdnf.cn/news/553141.html

相关文章:

  • 计算机视觉与深度学习 | matlab实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据)
  • VMD查看蛋白质-配体的分子动力学模拟轨迹
  • 【Redis实战篇】达人探店
  • Golang的代码注释规范与实践
  • 机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况
  • 33、魔法防御术——React 19 安全攻防实战
  • 每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
  • AMO——下层RL与上层模仿相结合的自适应运动优化:让人形行走操作(loco-manipulation)兼顾可行性和动力学约束
  • 【优秀三方库研读】在 quill 开源库中 QUILL_MAGIC_SEPARATOR 的作用是什么,解决了什么问题
  • 【爬虫】12306自动化购票
  • 【VS Code】Qt程序的调试与性能分析
  • SN生成流水号并且打乱
  • LTX-Videov本地部署教程:时空扩散+多尺度渲染,重塑AI视频研究范式
  • 第 4 章:网络与总线——CAN / Ethernet / USB-OTG
  • STM32中的ADC
  • CSS之box-sizing、图片模糊、计算盒子宽度clac、(重点含小米、进度条案例)过渡
  • 喷涂喷漆机器人详解
  • python-leetcode 68.有效的括号
  • RSA加解密实战指南:Java与JavaScript实现详解 + 在线工具推荐
  • PyTorch 之 torch.distributions.Categorical 详解
  • Vue 3.0 Transition 组件使用详解
  • 高等数学笔记——向量代数与空间解析几何1
  • Mujoco 学习系列(一)安装与部署
  • C#新建打开文件对话框
  • 机器学习 集成学习方法之随机森林
  • Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN
  • 精益数据分析(73/126):黏性阶段的功能优先级法则——七问决策模型与风险控制
  • 【神经网络与深度学习】扩散模型之原理解释
  • 调皮用法|python语言中的self参数
  • python训练营打卡第29天