GAMES101笔记 Lecture10 Geometry1 (Introduction)

news2024/12/25 12:51:55

目录

      • Application for Texture(纹理的应用)
        • Environment Map(环境光贴图)
          • Spherical Environment Map(球形环境光贴图)
          • Cube Map(立方体贴图)
        • Texture can affect shading!(纹理可以作用于着色)
          • How to perturb the normal (in flatland)(如何计算法线如何变化呢?)
          • Displacement mapping(位移贴图)
        • Provide Precomputed Shading(提供预先计算好的阴影)
        • 3D Textures and Volume Rendering(三维纹理和体渲染)
      • Introduction to geometry(几何介绍)
        • Examples of Geometry(几何的例子)
        • Many Ways to Represent Geometry(许多方式来表示几何)
          • 隐式的几何
          • 显示的几何
          • "Implicit" Representations of Geometry(几何的隐式表示)
          • "Explicit" Representations of Geometry(几何的显式表示)
          • Many Implicit Representations in Graphics
            • 代数曲面
            • Constructive Solid Geometry(CSG)
            • Distance Functions(距离函数)
            • Level Set Methods(水平集)
            • Fractals(分形)
      • 参考资源

Application for Texture(纹理的应用)

继续上节课的内容,纹理的应用部分。

在现代GPU中,我们可以理解纹理就是内存加范围查询,可以做不同范围的查询。

Environment Map(环境光贴图)

我们可以用纹理去描述整个环境光的样子,用环境光去渲染其它物体。

在这里插入图片描述

Spherical Environment Map(球形环境光贴图)

我们可以把整个环境光记录在球上,然后把它展开:
在这里插入图片描述
但是会出现上下方扭曲的情况:这不是一个均匀的描述

在这里插入图片描述

Cube Map(立方体贴图)

为了解决上图中出现的扭曲的情况,使用立方体来记录环境光,然后将其展开:

在这里插入图片描述
因为立方体六个面都是均匀的,因此很少出现扭曲的情况。

二者的本质是相同的,都是为了描述来自不同方向的光照信息。

Texture can affect shading!(纹理可以作用于着色)

纹理并不只可以用来描述颜色:

我们可以在纹理贴图上定义一个相对高度,这就是凹凸贴图

如果纹理贴图存储的是法向量,这就是法线贴图

在这里插入图片描述
我们并不需要改变任何几何信息,三角形数量不会改变:

  • 对于每个像素,对平面的法向量进行扰动
  • 凹凸贴图通过改变高度来改变法线。
How to perturb the normal (in flatland)(如何计算法线如何变化呢?)

首先,考虑简单的情况,在一维版本中:

  • 假设原始平面的法向量是 n ( p ) = ( 0 , 1 ) n(p) = (0, 1) n(p)=(0,1)
  • 那么在凹凸贴图中,点 p p p的切线方向为: c × [ h ( p + 1 ) − h ( p ) ] c \times [h(p + 1) - h(p)] c×[h(p+1)h(p)],其中常数 c c c是我们自定义的关于凹凸贴图影响的常数。
  • 通过切线就可以计算出法线,逆时针旋转90度即可,: n ( p ) = ( − d p , 1 ) n(p) = (-dp, 1) n(p)=(dp,1),进行归一化即可。

在这里插入图片描述

现在,考虑复杂的情况,在三维版本中:

  • 假设 p p p点的原始法线为 n ( p ) = ( 0 , 0 , 1 ) n(p) = (0, 0, 1) n(p)=(0,0,1)
  • p p p点的切线:分别计算高度关于 u u u v v v的导数
    • d p / d u = c 1 ∗ [ h ( u + 1 ) − h ( u ) ] dp / du = c1 * [h(u + 1) - h(u)] dp/du=c1[h(u+1)h(u)]
    • d p / d v = c 2 ∗ [ h ( v + 1 ) − h ( v ) ] dp / dv = c2 * [h(v + 1) - h(v)] dp/dv=c2[h(v+1)h(v)]
  • 可以得出现在 p p p点的法线为: n ( p ) = ( − d p / d u , − d p / d v , 1 ) n(p) = (-dp / du, -dp / dv, 1) n(p)=(dp/du,dp/dv,1),记得做归一化处理。
  • 这是局部坐标系中,我们还需要变换回世界坐标系,在作业3中有体现。
Displacement mapping(位移贴图)

使用纹理来定义任何一点应该有的相对的高度。

和凹凸贴图不同的是,位移贴图真的会让顶点进行移动,顶点位置发生了变化。

在这里插入图片描述

Provide Precomputed Shading(提供预先计算好的阴影)

在这里插入图片描述

3D Textures and Volume Rendering(三维纹理和体渲染)

具体内容,后续会细致的讲解。
在这里插入图片描述

Introduction to geometry(几何介绍)

Examples of Geometry(几何的例子)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Many Ways to Represent Geometry(许多方式来表示几何)

隐式的几何
  • 代数曲面
  • 水平集,等值集
  • 符号距离函数
显示的几何
  • 点云
  • 多边形网格
  • subdivision, NURBS
“Implicit” Representations of Geometry(几何的隐式表示)

定义了空间中的点需要满足的关系:

例如,使用隐式的方法来定义一个球面:

x 2 + y 2 + z 2 = 1 x^2 + y^2 + z^2 = 1 x2+y2+z2=1

更普遍的表示方式: f ( x , y , z ) = 0 f(x, y, z) = 0 f(x,y,z)=0

存在的问题:

哪些点在曲线上呢?

有时会很难看出来:
在这里插入图片描述
优点:
很容易判断一个点是否在曲面上,或者在里面还是在外面?

只需要把坐标代入表达式,如果是正的就认为在物体外,负的就在物体内部。

“Explicit” Representations of Geometry(几何的显式表示)

所有的点都直接给出活通过参数映射的方式给出:

在这里插入图片描述
但是,显示的表面很难判断一个点是否在表面上,还是在表面里面或者外面。

根据需要来选择什么样的表示方法

Many Implicit Representations in Graphics
代数曲面

利用数学公式进行表示,缺点就是不直观,上面已经展示过了。

在这里插入图片描述

Constructive Solid Geometry(CSG)

通过一系列基本几何的基本布尔运算来定义新的几何:

在这里插入图片描述

Distance Functions(距离函数)

通过描述一个空间中的任意一个点到曲面的最小距离来定义曲面,这个距离可以是正的可以是负的。

通过使用距离函数来将曲面融合在一起:

在这里插入图片描述
在这里插入图片描述

Level Set Methods(水平集)

有时候 s d f sdf sdf并不太好通过一些表达式来表示出来,这时候就可以通过水平集的方式进行表示:

我们关注什么地方等于0:

在这里插入图片描述

Fractals(分形)

类似递归的思想。

在这里插入图片描述

参考资源

GAMES101 Lecture10

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

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

相关文章

《AutoSar实战》读写DID之三:代码实现

文章目录 前言一、检查生成的接口以及数据类型1. 读DID函数接口生成2. 写DID函数接口生成3. 写NvM接口生成4. RAM数组生成 二、代码编写1. 读DID2. 写DID 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点&#…

行走江湖,一最多的行

本篇博客会讲解力扣“2643. 一最多的行”的解题思路,这是题目链接。 本题的思路是:从上到下遍历二维数组,统计每一行1的个数。使用ret数组的第一个元素维护1最多的行的下标,第二个元素维护最多的1的个数。若发现某一行的1的个数比…

kettle取昨天时间设置任意时间变量

文章目录 kettle取昨天时间&设置任意时间变量设置系统信息增加常量计算器设置变量 总结 kettle取昨天时间&设置任意时间变量 kettle 版本7.1,如下图所示: 所需要组件:1 获取系统信息; 2 增加常量; 3 计算器; 4设置变量 结果可以用于…

yolov8源码解读(part2: 检测,分割)

本文解读下图框中的detection部分 和 没有画出来的分割部分。 注意每个模块右上角的数字,它代表第几个模块, 现在检测和分割的输入都是15, 18, 21个模块的输出(图中圆圈处)。 在代码解读的时候会用[15,18,21]提示需要用到15, 18, 21个模块的输出。 yolov8的实例分割用了y…

Pandas包构建DataFrame的几种方式

1. Pandas Pandas是python的一个第三方包,是一个结构化数据工具集,能够更加灵活、快速的对数据进行清洗和处理,适用于单击大数据量的数据分析和数据开发 使用pandas包之前,首先安装 pip install -i https://pypi.tuna.tsinghua.…

【STM32】STM32G系列使用CORDIC模块加速计算

1.前言 STM32G431系列产品内置了CORDIC运算单元,可以用来加速数学计算,如三角函数、取模、开方等。适合大量数据进行相同的运算操作。配合DMA可以大大节省CPU计算开销。 2.CubeMX配置 使用CORDIC模块无需配置参数,若采用DMA方式则只需配置…

JavaWed第三章:JavaScript的全面知识

目录 前言 一.JavaScript的简介 💖概念 💖学习内容 二.JavaScript的引入方式 💖内部脚本 💖外部脚本 三.JavaScript的基础语法 💖语法的书写 💖变量 ✨ 全局变量 ✨局部变量 ✨常量 &a…

Vue3使用$refs获取节点生产环境undefined-使用getCurrentInstance-ctx应改用proxy

vue3项目,在使用refs获取节点,开发环境正常,生产环境报错 console.log(getCurrentInstance()) internalInstance.ctx, internalInstance.proxy 开发环境正常-生产环境报错 internalInstance.ctx 生产环境获取不到值 ctx打包后在生产环境下是获…

激光SLAM(一):点云基础知识

点云基础知识 一、激光雷达介绍1. 机械旋转式雷达2. 固态雷达 二、测量模型与点云1. Range-Azimuth-Elevation(RAE)- XYZ2. 点云的Packets表示3. 点云的鸟瞰图表示4.Range Image5.TSDF 三、点云的近邻关系Brute-force KNN栅格、体素KD-tree寻找近邻四叉树…

Visual Studio Code系列--CMake Tools使用说明

一、目的 在linux系统上开发程序,一般都是使用vimgccgdb进行的;但是为了开发效率我们也会使用Visual Studio Code进行开发,毕竟有界面的开发调试还是更加友好一些。 老牌程序员肯定都知道make构建工具,但是其晦涩的语法还是难住不…

二十一、数值操作(二)

目录 七、数值查找 1、Excel实现 2、Python实现 八、区间切分 1、Excel实现 2、Python实现 九、插入新的行或列 1、Excel实现 2、Python实现 十、行列互换 1、Excel实现 2、Python实现 十一、索引重塑 十二、长宽表转换 1、宽表转换为长表 (1&#x…

如何提升软件质量及开发效率

如何提升软件质量及开发效率 文章目录 如何提升软件质量及开发效率1、简介2、软件质量模型3、需求分析4、软件设计5、项目管理1.1 版本管理1.2 项目结构规范 6、编码规范7、代码评审8、软件调试9、软件测试 1、简介 保证软件质量,是一个贯穿整个软件生存周期的重要…

Java利用朴素贝叶斯分类算法实现信息分类

目录 贝叶斯分类算法 代码实例 数据集data.txt代码实现输出结果使用场景 贝叶斯分类算法 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Nave Bayes,NB)分类算法可以与决策树和神…

项目管理考核积分指标库大全V3.0

近期热文:大咖来袭!中国PMO&PM大会议程隆重发布,三城联动 北京、上海、深圳三地同步进行,两天近70位项目管理大咖专家齐聚一堂,交流分享。各路高手汇聚一处,互相学习。精心的圆桌设计,穿插…

uniapp打包白屏问题

【bug】:浏览器运行正常,模拟器、真机运行只有tab栏显示,或者完全白屏。打包也是白屏。 【控制台报错信息】: 注意:app不支持dom操作 【解决办法】:在main.js里修改 render函数是vue通过js渲染dom结构的…

前端vue入门(纯代码)20

总以为自己还很年轻,却忽略了岁月的脚步,当身边的一道道风景变成了回忆,才忽然发现,风景依然在,而人已非少年。!!! 【22.求和案例--纯Vue版本】 太简单了,直接上代码案…

Squid代理服务器

Squid代理服务器 一、Squid相关知识 1.功能 Squid 主要提供缓存加速、应用层过滤控制的功能。 2.工作机制 1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2.将获得的网页数据(静态 Web 元素)保存到…

js:使用typed.js实现打字动画效果

效果预览 目录 实现方式一: 原生JS实现实现方式二&#xff1a;typed.js实现 实现方式一: 原生JS实现 <div id"code"> 我感到未尝经验的无聊&#xff0c;是自此以后的事。我当初是不知其所以然的&#xff1b; 后来想&#xff0c;凡有一人的主张&#xff0c;得…

高薪offer收割面试题之缓存穿透,击穿,雪崩

缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩是我们在应用缓存时最常碰到的问题&#xff0c;也是面试的热点考点。究竟什么是缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#xff0c;如何解决&#xff0c;本文会进行详细的剖析。 缓存穿透 什么是缓存穿透&#…

CUDA和CUDNN安装和版本验证

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装二、关键指标1.驱动版本和CUDA版本对应1.最适配版本2.最低支持版本 2.CUDA版本和CUDNN版本对应 三、验证有效性1.驱动验证2.CUDA验证1.nvcc2.sample 3.…