我是靠谱客的博主 谦让电话,最近开发中收集的这篇文章主要介绍6、计算机图形学——着色频率、插值与插值的矫正,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、着色频率

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

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、计算机图形学——着色频率、插值与插值的矫正的全部内容,希望文章能够帮你解决6、计算机图形学——着色频率、插值与插值的矫正所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部