计算机图形学基础--Games101笔记(一)数学基础与光栅化

文章目录

  • 数学基础
    • 向量
    • 插值
      • 三角形插值
      • 双线性插值
    • 平面定义
      • 法线-点表示
  • 第一部分:光栅化
    • 坐标变换
      • 二维变换
      • 3D变换
      • 视图变换(MVP)
      • 投影变换
    • 光栅化
      • 采样
      • 抗锯齿(反走样)
      • 可见性(遮挡)
    • 着色与纹理
      • Blinn-Phong着色模型
      • 着色频率
      • 渲染管线
      • 纹理
        • MipMpa方法
        • 纹理作用

数学基础

向量

点乘,叉乘和投影:

插值

三角形插值

**重心坐标:**我们通过任意点的重心坐标来插值。 V = α V A + β V B + γ V C V=\alpha V_A+\beta V_B+\gamma V_C V=αVA+βVB+γVC。注意重心坐标没有投影不变性,如果插值三维属性,需要利用投影前的坐标插值。例如深度插值应该用三维空间坐标。

双线性插值

平面定义

法线-点表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一部分:光栅化

坐标变换

二维变换

从上述公式中我们发现,平移变换需要两个向量的加和,为了使得所有的变换统一写成矩阵乘法的形式,我们引入齐次坐标。在齐次坐标中,每个点表示为: ( x , y , 1 ) T (x,y,1)^\mathrm{T} (x,y,1)T,每个向量表示为: ( x , y , 0 ) T (x,y,0)^\mathrm{T} (x,y,0)T。通过这种方式我们可以确保,点加点等于点(中点),点减点等于向量,向量加减向量还是向量。点加减向量还是向量。特别地,我们认为 ( x , y , k ) T = ( x / k , y / k , 1 ) T (x,y,k)^\mathrm{T}=(x/k,y/k,1)^\mathrm{T} (x,y,k)T=(x/k,y/k,1)T。在引入齐次坐标后,平移可以写成:
在这里插入图片描述

在其次坐标系下的变化矩阵最后一行一般都是001,左上角是缩放,拉伸,镜像,旋转变化,最后一列是平移变换。在这种情况下,是先进性二维变换,在进行平移变换。

如果要求逆变换,求矩阵的逆即可。由于矩阵乘积不满足交换律,因此计算的时候不可更改变换矩阵的顺序。注意旋转矩阵是正交矩阵,求旋转矩阵的逆相当于求旋转矩阵的转置。

3D变换

在三位空间中点和向量的描述形式和二维空间类似(只增加了一个z维)。三位空间中的旋转和二位空间有些许不同。我们按照xyz的顺序构建坐标系,沿x轴旋转的时候yxz是x轴,沿y轴旋转的时候xz是-y轴。因此需要添加符号(conx=-conx)

我们可以通过分解的方式,吧沿任意轴旋转a度分解为沿xyz轴分别旋转a1,b1,c1度。也可以通过三位旋转矩阵直接求沿着任意轴旋转。 R ( n , α ) R(n,\alpha) R(n,α)是沿着空间中任意一个轴n逆时针旋转 α \alpha α度后的结果。

视图变换(MVP)

image-20250405164510392

投影变换

投影变换分为两种:正交投影和透视投影。正交投影我们先做平移,再做缩放。我们把物体的中心移动到坐标轴远点,之后把物体限制在(-1,1)的立方体中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**透视投影:**我们先把透视投影变换为正交投影所需的长方体,再进行正交投影。再压缩透视投影的梯形体时,对于前面的面上的点,z值不变,后面面上的点同理。

光栅化

采样

我们先忽略z轴,考虑-1,1的正方体。采样就是判断像素点是否在三角形内。我们可以对整个屏幕范围采样,也可以采用bounding采样,还有行bounding采样。

抗锯齿(反走样)

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

可见性(遮挡)

如何在采样的时候维持正确的模型顺序?–深度缓冲方法。该方法无法处理透明物体。如果两个三角形在同一个像素内有相同的深度如何处理?(工程实现问题)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

着色与纹理

着色器可以做任何事情!!!

在本章节,我们只考虑着色点本身,不考虑其他点(比如遮挡)。每个着色点可以是一个像素,也可以是一个fragment,这取决于我们如何采样。I表示入色光的单位光强,V代表反色方向,n是法线。ivn都是单位向量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Blinn-Phong着色模型

该模型是一个经验模型。在该模型中,我们考虑漫反射,镜面反色和环境光。

漫反射diffuse: L d = k d ( I / r 2 ) m a x ( 0 , n I ) L_d=k_d(I/r^2)max(0,nI) Ld=kd(I/r2)max(0,nI)。其中kd为漫反射系数(物体颜色),nI是光线和着色点的cos值。

镜面反射specular: L s = k s ( L / r 2 ) m a x ( 0 , n h ) p , , , h = ( v + I ) / ∣ ∣ V + I ∣ ∣ L_s=k_s(L/r^2)max(0,nh)^p,,,h=(v+I)/||V+I|| Ls=ks(L/r2)max(0,nh)p,,,h=(v+I)/∣∣V+I∣∣,H代表入i和v的半程向量,如果该半程向量与n很近,则代表人眼看到的高光越明显(为什么算半程向量,而不是算光的反色向量和人眼向量的sin,是因为半程向量计算简单)ks一般为白色。

环境光ambient: L a = K a I a L_a=K_aI_a La=KaIa,该模型是一个经验模型,环境光当作一个常熟项简单处理。

最终着色: L d + L s + L a L_d+L_s+L_a Ld+Ls+La

着色频率

  1. 三角形着色,三角形法线可以用叉乘计算
  2. 顶点着色,顶点法线可以用该顶点相关的三角形的法线的加权平均值。此外也可以用该顶点实际表示的图形来确定法线,例如如果用三角形组合表示圆,则顶点的法线防线可能是圆心到该顶点的连线方向。
  3. 像素着色(fragemt),算出三角形的所有顶点法线,用插值方法得到像素法线。phong shadings

渲染管线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

纹理

物体不同位置可能有不同的属性(着色时用特有的属性而不用同一的属性),该属性定义在物体表面上。我们把这个属性用一张图(纹理图)来表示,同时给出模型上每一个点对应纹理图上的点(纹理映射,纹理坐标一般定义在三角形的顶点上)。

**纹理太小:**映射道德如果是纹理中的非整数坐标,我们可以采用该顶点周围的四个点进行双线性插值,用差值,返回插值后的属性。

**纹理太大:**纹理太大时会导致采样频率不足,从而产生走样。不同像素覆盖纹理的区域不同,有些点可能实际覆盖了很大一部分纹理区域,只返回该点的属性必然会导致走样问题。可以通过范围查询方法MipMap来缓解。范围查询返回一定范围内的平均值,MipMap是一种近似方法,fast,approx,square。该方法在远距离下会导致过度模糊。

MipMpa方法

该方法会提前计算4和1,8和1,,,,点的平均值,并保存 l o g 2 h log_2h log2h个纹理图。其中h是正方形纹理的长度。

在进行纹理映射时,我们首先确定每个点所覆盖的纹理范围。我们通过该点周围的四个点的坐标来把纹理覆盖范围近似成正方形。通过纹理覆盖范围的边长查找相应层级的纹理图。如果log2L不为整数,我们可以在两层纹理图中采用三线性插值的方式得到最终属性。

MipMap方法无法解决该点所覆盖的纹理是矩形(尤其是长条矩形)情况下的的走样问题。一种缓解方法是各向异性过滤。该方维护不同长宽比例下的纹理分层图。

如果要缓解倾斜矩形,可以采用EWA filtering方法,但是该方法计算量大。

纹理作用

**环境光纹理:**纹理可认为是gpu中的一块数据,可以做点查询和范围查询。因此我们可以把环境光做成纹理,渲染过程中通过纹理映射仿照环境光。我们可以用一个光滑的球体来记录环境光,把球展开贴到环境中的物体表面。用球有个缺点是极点初会被压缩。为了解决这个问题,我们可以用一个正方体包围一个球体。把球体上的每一个点都沿着法线方向打到立方体表面。

**凹凸贴图:**凹凸贴图定义了每个点的相对移动距离,从而改变着色点的法线,渲染出一种凹凸的质感。实际上该点并不会凹凸。我们假设原始表面是水平,并且法线向上。在二维情况下更改后的法线如下图左图。我们通过推广,可以得到三位空间下更改后的法线,下图右图。(纹理保存的是高度变化信息h)。注意在三位空间中,法线方向不一定为001,此时我们需要转换坐标系,在新的坐标系下法线方向为001,此时我们求出新坐标系下更改后的法线,再将该法线映射会原坐标系。

**三维纹理:**我们也可以定义一个三维空间的噪声函数来作为纹理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**环境光遮蔽纹理:**我们可以提前算出物体的环境光遮蔽,把他保存为纹理,加速实时渲染。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

相关文章

@RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse

在Java Web开发中,RequestParam、RequestBody、HttpServletRequest 和 HttpServletResponse 是常用的组件,它们用于处理HTTP请求和响应。下面分别介绍它们的使用场景和使用方法: 1. RequestParam RequestParam 是Spring MVC框架中的注解&am…

【硬核数学】2. AI如何“学习”?微积分揭秘模型优化的奥秘《从零构建机器学习、深度学习到LLM的数学认知》

在上一篇中,我们探索了线性代数如何帮助AI表示数据(向量、矩阵)和变换数据(矩阵乘法)。但AI的魅力远不止于此,它最核心的能力是“学习”——从数据中自动调整自身,以做出越来越准确的预测或决策…

10.15 LangChain v0.3重磅升级:Tool Calling技术颠覆大模型工具调用,效率飙升300%!

LangChain v0.3 技术生态与未来发展:支持 Tool Calling 的大模型 关键词:LangChain Tool Calling, 大模型工具调用, @tool 装饰器, ToolMessage 管理, Few-shot Prompting 1. Tool Calling 的技术革新 LangChain v0.3 的工具调用(Tool Calling)功能标志着大模型应用开发进…

[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)

[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十) 一、痛点 你是否经历过这些场景? 数据库字段频繁变更,维护文档耗时费力用Excel维护表结构,版本混乱难以追溯手动编写Word文档&#…

Image and depth from a conventional camera with a coded aperture论文阅读

Image and depth from a conventional camera with a coded aperture 1. 研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 创新方法:编码光圈设计与统计模型2.1 核心思路2.2 关键公式与模型架构2.2.1 图像形成模型2.2.2 深度可区分性准则2.2.3 统计模型与优化框架2.2…

JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)

目录 ✅ 教程目的 🛠️ 准备工作 📄 操作步骤 第一步:新建测试计划 第二步:添加 HTTP 请求 第三步:添加参数列表(表单参数) 第四步:添加结果查看器 第五步:运行测…

交易所开发:构建功能完备的金融基础设施全流程指南

交易所开发:构建功能完备的金融基础设施全流程指南 ——从技术架构到合规安全的系统性解决方案 一、开发流程:从需求分析到运维优化 开发一款功能完备的交易所需要遵循全生命周期管理理念,涵盖市场定位、技术实现、安全防护和持续迭代四大阶…

【数据结构篇】排序1(插入排序与选择排序)

注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…

Cursor日常配置指南

文章目录 整体说明一、简单介绍1.1、简介1.2、功能 二、日常配置2.1、Profiles 简介2.2、Cursor 配置2.2.1、通用设置(General)2.2.2、功能设置(Features)2.2.2.1、长上下文(Large context)2.2.2.2、代码索…

客户体验数据使用的三种视角——旅程视角

企业收集到大量的客户体验数据之后,应该如何应用?有哪些主要的使用场景和分析视角呢?接下来,体验家团队将通过三篇文章陆续介绍体验数据的三种应用场景,以帮助企业更有效地利用体验数据进行改进。 这三个场景分别是…

大语言模型怎么进行记忆的

大语言模型怎么进行记忆的 大语言模型(LLM)本身是无状态的,每次输入独立处理,但可通过以下方式实现对话记忆及长期记忆能力: 模型架构改进 显式记忆模块: 记忆网络(Memory Networks) :在模型里嵌入可读写的记忆单元,像键值存储 (Key - Value Memory)或动态记忆矩…

Spring Boot 与 RabbitMQ 的深度集成实践(三)

高级特性实现 消息持久化 在实际的生产环境中,消息的可靠性是至关重要的。消息持久化是确保 RabbitMQ 在发生故障或重启后,消息不会丢失的关键机制。它涉及到消息、队列和交换机的持久化配置。 首先,配置队列持久化。在创建队列时&#xf…

成功案例丨GEZE与Altair合作推动智能建筑系统开发

Altair 作为计算智能领域的全球领导者,将分别在北京、上海、成都、深圳举办 “AI驱动,仿真未来”Altair 区域技术交流会。届时将汇聚行业专家与先锋企业,共同探讨仿真智能化如何赋能工业创新,分享最新仿真与 AI 技术的应用实践。欢…

DDoS与CC攻击:谁才是服务器的终极威胁?

在网络安全领域,DDoS(分布式拒绝服务)与CC(Challenge Collapsar)攻击是两种最常见的拒绝服务攻击方式。它们的目标都是通过消耗服务器资源,导致服务不可用,但攻击方式、威胁程度和防御策略存在显…

循环中使用el-form

循环中使用el-form 主要是校验问题 el-table 的数据 :data“ruleForm.tableData” :prop“‘tableData.’ $index ‘.name’” :rules“rules.name” <el-button type"primary" click"addNewData">新增项目</el-button><el-form :model&…

SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)

上一章学习了CAP开发准备&#xff0c;添加Service。 SAP学习笔记 - 开发12 - CAP 之 开发准备&#xff0c;添加服务-CSDN博客 本章继续学习CAP开发 - 添加数据库支持&#xff08;Sqlite&#xff09;。 目录 1&#xff0c;数据库准备 - H2 内存数据库 - Sqlite数据库 a&…

【数据结构与算法】——图(三)——最小生成树

前言 本将介绍最小生成树以及普里姆算法&#xff08;Prim&#xff09;和克鲁斯卡尔&#xff08;Kruskal&#xff09; 本人其他博客&#xff1a;https://blog.csdn.net/2401_86940607 图的基本概念和存储结构&#xff1a;【数据结构与算法】——图&#xff08;一&#xff09; 源…

Flink运维要点

一、Flink 运维核心策略 1. 集群部署与监控 资源规划 按业务优先级分配资源&#xff1a;核心作业优先保障内存和 CPU&#xff0c;避免资源竞争。示例&#xff1a;为实时风控作业分配专用 TaskManager&#xff0c;配置 taskmanager.memory.process.size8g。 监控体系 集成 Prom…

面试点补充

目录 1. 搭建lnmp Linux 系统基础命令 nginx相关命令 MySQL 相关命令 PHP 相关命令 验证命令 下载并部署 Discuz! X3.4 论坛 到 Nginx 网站 2. 脑裂 2.1 脑裂的定义 2.2 脑裂产生的原因 1. 主备节点之间的心跳线中断 2. 优先级冲突 3. 系统或服务负载过高 2.3 如何…

天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级

目录 天能股份SAP系统整合案例&#xff1a;技术驱动集团化管理的破局之路 一、企业背景&#xff1a;新能源巨头的数字化挑战 二、项目难点&#xff1a;制造业的特殊攻坚战 1. 生产连续性刚性需求 2. 数据整合三重障碍 3. 资源限制下的技术突围 三、解决方案&#xff1a;S…