重心坐标

定义,已知三角形三个顶点,那么该三角形内任何一个顶点都可以由这三个点的坐标线性表示出来,而且线性组合前面的系数满足和为1,而该点坐标就是(α,β,γ),称为重心坐标定理。

然后我们就可以利用重心坐标来插值三角形内部一点的位置,法线,深度等等属性。
注意,这里是3维空间中的三角形,我们把这个三角形投影到平面上后,三角形的比例关系会发生变化,这时我们该怎么选取重心坐标?
答:我们不管是正交投影还是透视投影,都选取3维空间中的三角形来求重心坐标,再插值其他属性。

纹理

纹理映射

过程:首先根据采样点求重心坐标得出每个点的属性,也就是纹理坐标(u,v),然后在纹理中寻找这一坐标对应的值,得到这一采样点的颜色值,然后把这一纹理上的值赋给我们的Kd(漫反射系数),就相当于把这一纹理贴在了模型上

纹理过小时

我们在应用中可能会存在着这么一种情况,也就是屏幕分辨率很高,但纹理的分辨率低,这时我们在根据屏幕中的像素求纹理中对应的映射,也就是纹素的时候就会得到非整数的坐标的值,而我们无法根据非整数坐标找到对应的纹理像素坐标,这时就需要对纹理映射值进行处理。

  1. 第一种方法是将纹理映射值进行取整后得到一个整数值的坐标,最后的结果就是一定范围内的像素点对应的纹素值是一样的
  2. 第二种方法是双线性插值,也就是在纹理映射所在的纹素旁选取四个点,然后根据这相邻的四个点的纹素值在x轴和y轴上求插值,得到这一点的纹素值

首先我们对水平坐标上进行插值,得到u0和u1的坐标

然后我们在竖直方向上再插值,得到我们所求的f(x,y),这也就是我们根据双线性插值求出的这个像素点对应的纹素值(颜色)。

效果如图,是不是更平滑了?

纹理过大时

有这样一种场景,也就是在透视投影中,远景的物体会被视角压缩,占据很少的像素空间,这时一个像素覆盖的纹理区域很大,我们再用纹理区域的平均值赋给这一像素点就会丢失很多细节,这一问题也可以理解为信号信息变化过快,而我们的采样跟不上变化速度,从而造成的一种走样问题。
这个时候我们需要对纹理进行范围查询。


结果如下:

mipmap

定义

mipmap首先由一张图生成很多张图,分辨率逐渐降低。

最后把这些图片进行存储,得到了一个图像金字塔结构。因为这一张图片而多出来的这些开销的结果为1/3原图。

而mipmap只能对正方形区域进行处理,所以我们需要在像素映射的纹理中选取一个正方形区域。

流程

首先,我们求出一个像素中心点和水平相邻,竖直相邻的像素中心点在纹理中对应的位置,然后对水平位置和竖直位置求微分,选取最长的一段作为正方形的边长,这样就得到了一个正方形区域。



然后,我们根据得到的mipmap进行查询。
如下图所示,我们可以根据场景中的深度选择在mipmap的哪一层进行纹理信息查询。例如离我们很近的栏杆区域,那么就在最底层查询,最远的墙壁就在最高层进行查询。


但是,这样也有一个问题,每一层的信息也存在着间隔,如何使得结果更平滑,这时还是要用到插值的方法来。
比如我们在最后一层到倒数第二层之间进行查询,这时我们先将这一个像素在mipmap的这两层纹理上进行双线性插值,然后再将这两层的结果进行线性插值,在经过三次线性插值后,得到这一个像素的颜色。
最后,对于任何区域的像素,我们就可以根据这种三线性插值的方法做一次查询求出对应纹理的平均。


最后效果如下:

各向异性过滤

当一个像素对应的纹理区域为水平竖直方向的矩形时,我们使用mipmap进行范围查询可以得到很好的结果,但是当一个像素的纹理映射为一个矩形区域时,为了得到更准确的结果,我们使用一种方法叫做各向异性过滤,这时多出来的开销为原图的3倍。
如图所示,我们将一个卫星图片沿水平方向进行横向压缩,沿y轴方向进行竖向压缩,会得到一个沿着各方向进行不同压缩程度的矩形图,于是我们就可以在一个矩形的区域内进行范围查询,而不只是限制在一个正方形区域内

但是,在纹理映射的时候,映射的区域不仅仅是一个规则的矩形区域,还有可能是一个斜着的区域,这时我们使用EWA过滤。

EWA过滤

EWA的思想在于对于一个不规则的图形,我们都可以用多个规则的图形来表示它。
如下图所示,我们可以用三个圆心区域来表示这一个椭圆形区域,再对每一圆形区域进行范围查询,最后得到这一整个区域的结果。

GAMES101笔记(九)相关推荐

  1. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  2. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  3. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  4. 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...

    初中学霸提升成绩的16个习惯 1.记忆习惯.一分钟记忆,把记忆和时间联系起来,这里还含有注意的习惯. 一分钟写多少字,读多少字,记多少字,时间明确的时候,注意力一定好.把学习任务和时间联系起来,通过一 ...

  5. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  6. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  7. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验

    Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...

  8. [统计学笔记九] 方差分析(ANOVA)

    [统计学笔记九] 方差分析(ANOVA) 方差分析(Analysis of Variance,简称ANOVA) 方差分析(ANOVA)又称"变异数分析"或"F检验&quo ...

  9. Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)

    Games101 笔记 Lecture 7-9 Shading [Illumination, Shading] visibility / occlusion Shading简介 Blinn-Phong ...

  10. JavaScript学习笔记(九)(验证框架,layer弹出层)

    JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...

最新文章

  1. Day 14 知识点串讲 下
  2. 【转帖】dopod touch diamond 应用小常识:)
  3. 2017.11.7 Python 制作EFM32/ AVR批量烧录工具
  4. hudson linux节点,Linux 环境下搭建 Jenkins(Hudson)平台
  5. Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?
  6. 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
  7. json-server-----》基本使用
  8. 数组去重的各种方式对比
  9. ssh(Spring+Spring mvc+hibernate)——applicationContext-servlet.xml
  10. Java 8类型注释
  11. python3.4安装pygame_python 3.4.3 安装pygame
  12. Fedora Linux基本配置
  13. 理解最小生成树与权值最小边无关
  14. 虚拟串口软件VSPM使用手册
  15. 射影几何----帕普斯定理的证明
  16. r语言怎么做经验分布_医学统计与R语言:对数正态分布与卡方分布
  17. 关于提问的一些书籍及文章
  18. HTML+CSS面试试题(部分)
  19. 两万字的Redis笔记!
  20. Android如何设置背景图片

热门文章

  1. Python学习笔记(13)-Python类与对象示例
  2. 阿里云 云视频会议 web端 部署 步骤(记录)
  3. 基于粒子群优化的BP神经网络(分类应用) - 附代码
  4. ROS系统用python创建发布者与订阅者,并发布自定义话题消息
  5. iOS开发学习专题-基础知识(一)NSString NSMutableString NSRange NSNotFound详细使用方式
  6. 被“网暴”的国产机器狗,真自研还是新噱头?
  7. 电池模拟器应用之电子烟电路板该如何测?
  8. 基于粒子群优化算法的IEEE33节点分布式电源选址定容附Matlab代码
  9. 使用ConnectifyInstaller软件模拟wifi热点,实现网络共享
  10. UE4 学习记录二 给角色添加骨架,皮肤,及运动动画