一、着色频率

通过光照模型可知,最终的光照结果和光照点的法线向量关系很大。所以,根据不同的法线向量,就有不同的着色方法。在图形学中,法线分为:面法线、顶点法线和像素法线。光照和这三种法线相互作用,就有了三种不同的渲染频率

1.1、面着色(flat shading)

面着色就是利用物体面表上的每个三角形的法线向量进行光照强度的计算,进而决定物体表面的颜色。该方法效果较差(物体表面不光滑,棱角较多)

1.2、顶点着色 (vertex shading)

顶点着色就是利用每个顶点的法向量来计算光照强度,得到三个顶点的颜色后,通过插值的方式来对面内的点的像素进行计算

首先如何计算每个顶点的法线向量?

方法就是将所有共享该顶点的三角形面的法线向量计算出来,之后,将这些法线向量相加求平均,如下图所示

公式如下

这样,就能得到每个顶点的法线向量,继而根据光照模型就能算出每个顶点的像素

得到每个顶点的像素之后,就可以通过差值的方法得到顶点之间的所有点的像素。那么,什么叫做插值?插值的原理是什么呢

所谓插值就是根据给出端点的属性,计算出中间点的属性,从而使得整体的属性能够平滑过渡

插值的原理实际上就是某一向量可以由基向量的线性组合所表示,通过该原理可以计算三角形内任意一点的坐标

三角形内的任意一点P都可以由向量AB和AC进行表示,可以写为

进一步展开可得

而且,通过观察可以知道,如果要求点P在三角形内,那么,α和β都是都必须小于1,(1-α-β)也必须小于1

所以,三角形内任意一点的坐标都可以通过ABC的坐标来得到,这种情况是三个点所构成的面内坐标的表示方法

当去掉点C和相应的系数β后,就变成线段AB中的任意一点P的表示方法

上述两种情况就是面内插值和线内插值的计算方法

在图形学中,不仅可以对坐标进行插值,也可以对纹理坐标,颜色,深度、法线向量等等其他顶点属性进行插值计算

至此,根据上述结论,就可以根据三个顶点的颜色对三角形面内的所有点进行颜色插值,该方法效果如下

可见,比平面着色的效果平滑了许多

1.3、像素着色 (phong shading)

像素着色就是根据三角形三个点的法线向量来插值每个像素的法线向量,插值过程见1.2,该方法是phong发明的,所以又叫phong shading

效果如下

可见,phong shading比顶点着色的效果又光滑了一些

上述三种着色频率的效果都是针对同一精度的物体模型

但是同一种着色方式如果针对复杂情况不同的物体模型,那么,着色效果也会有不同

如下图所示

上图其实就是控制变量法:当着色频率不变时,物体模型越复杂,着色效果越好;当物体模型不变时,着色频率越高,着色效果越好

二、插值的矫正

在进行插值的时候,一般是使用屏幕坐标的属性进行插值,然而,这种插值出来的结果和实际的结果往往是不符合的

如下图所示,屏幕上的c点位于屏幕的y方向的中心,然而,世界坐标中的投影点C并没有位于真实物体上的中心。也就是说,屏幕上的插值属性并不能准确的表示出真实世界中的物体属性

那么任意一点的属性It该如何计算?

首先通过插值公式可知

其中t的推导过程如下

首先根据相似三角形原理,可得

根据线性插值可知,us,Xt和Zt可以表示为

将45带入3式得7式

再将12带入7得8式

将6代入8式得9式

最终可解得10

将t的结果代码Zt的线性插值表示可得11

化简可得

将10式代入任意属性的插值公式可得

将该式进行同分并分子分母同时除以Z1Z2可得

将12式代入,可得最终的It结果为

所以,屏幕上图c点的实际插值应该是It,而不是利用a,b插值的结果

参考:

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

Microsoft Word - lowk_persp_interp_06.doc (nus.edu.sg)

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

6、计算机图形学——着色频率、插值与插值的矫正相关推荐

  1. 5、计算机图形学——着色与光照模型

    一.着色(shading)的概念 着色,顾名思义就是给物体上色.在计算机图形学中,着色就是确定物体上或者图形上的每个像素的颜色. 像素或者物体表面的颜色受光照和材质的影响,光照中光线的颜色一定程度上决 ...

  2. 计算机图形学(七)-深度缓存、着色shadding、着色模型、着色频率、渲染管线

    shadding-着色 1 深度缓存 1.1 从画家算法到深度缓存 1.2 深度缓存 1.2.1 深度缓存深度缓存的实现方法 1.2.2 深度缓存注意事项 2 着色shadding 2.1 着色模型 ...

  3. 【计算机图形学入门】笔记8:Shading 2着色(着色频率、图形管线、纹理映射)

    08Shading 2着色(着色频率.图形管线.纹理映射) 前置知识 1.Specular Term 高光 2.Ambient Term 环境光照项 3.最终的成像公式 2.着色频率 1.Flat s ...

  4. 计算机图形学笔记七:Shading 2(着色频率,图形(实时渲染)管线)

    着色频率,图形(实时渲染)管线 1.着色频率(方法)(Shading Frequencies) 1.1平面着色(Flat shading) 1.2高洛德着色(Gouraud shading) 1.3冯 ...

  5. 【12月学习进度3/31—计算机图形学期末准备01】拉格朗日插值 + 三次Hermite插值

    相关概念 型值点:事先给定的离散点 插值:得到的曲线通过所有的型值点 逼近:不要求通过给定的所有型值点,用给定型值点控制曲线形状 Hermite多项式 拉格朗日插值 拉格朗日插值是当 j=0j=0j= ...

  6. 图形学基础 (五) 着色及着色频率

    文章目录 画家算法 ### Z-Buffer 深度缓存算法 着色(Shading) Blinn-Phong Reflectance Model 漫反射 Specular Term (镜面反射, 高光项 ...

  7. 计算机图形学四:着色-Shading

    文章目录 什么是shading? Blinn-phong 反射模型(reflection model) 漫反射(Diffuse reflection) 镜面/高光反射(Specular highlig ...

  8. 【计算机图形学】着色简介

    文章目录 前言 光照模型 纹理 前言 来源:GAMES101-现代计算机图形学入门-闫令琪 这里简单记录下. 我不知道这个理解对不对.着色(shading)可以分为两部分:光照模型+纹理映射.即:输入 ...

  9. Games101--现代计算机图形学入门 作业3笔记(渲染管线、着色模型、双线性插值)

    一.渲染管线 一.作业要求 在这次编程任务中,我们会进一步模拟现代图形技术.我们在代码中添加了ObjectLoader(用于加载三维模型),VertexShader与FragmentShader,并且 ...

最新文章

  1. 从输入URL到页面加载的过程
  2. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第三章——自编解析与答案
  3. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings
  4. JME3中级手册一API特征映射1
  5. Kubernetes基础:Pod的详细介绍
  6. Adob Flash Professional CS6发布Android手机应用报异常
  7. mvc jquery ajax分页实例,jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页...
  8. 【hdu - 2568】ACM程序设计期末考试081230
  9. VC2010 sp1修复补丁
  10. 怎么启动mysql2008_SQL Server 2008初次启动
  11. Camera IIC总线
  12. 虚拟机无法服务器系统安装win7系统,如何解决虚拟机安装Win7系统失败的问题
  13. [Qt笔记]设置VS2015下的应用工程图标
  14. Python包pretty_errors
  15. openStack cluster chk
  16. 钢琴五线谱 学习分享(兴趣爱好)
  17. CCNET的参考文件
  18. 刘宇辰java_大家帮忙取名字啊
  19. 盗号、薅羊毛、机器注册、恶意爬虫——618大促背后涌动的欺诈暗流
  20. 批量抓取东方财富EastMoney的宏观经济数据

热门文章

  1. 使用pgpool-ii建立PostgreSQL链接池
  2. mysql复习增删改查
  3. 书籍推荐——按内容划分
  4. phpstorm 提示请配置PHP解释器的解决办法
  5. predict_proba is not available when probability=False
  6. BigDecimal 类型转换、运算、比较
  7. mysql数据库---授权语句以及备份
  8. 设计模式10——flyweight模式
  9. queue 队列优先级
  10. Android HttpClient post MultipartEntity - Android 上传文件