Games101-课程7笔记

目录

第七节课 : 上节课遗留的Z-buff 和 Shading(光照-漫反射)

画家算法 : 也叫做优先填充 , 从远到近依次光栅化(画画) , 这是对三角形进行排序.

深度缓存(Z-Buffer)

深度缓存伪代码

计算深度的过程

目前已学的图形管线

光照

 漫反射


第七节课 : 上节课遗留的Z-buff 和 Shading(光照-漫反射)

 

画家算法 : 也叫做优先填充 , 从远到近依次光栅化(画画) , 这是对三角形进行排序.

比如 : 先画远处的山 , 再画近处的草地 , 最后画最近的树(新的覆盖旧的)

         画一个正方体 : 先画最远的面 , 再画左右上下, 最后是最近的面.

   

 

若判断了远近 , 就可以使用画家算法 , 但是有一个特殊的例子如下:

会发现它的两两三角形互相覆盖 , 难以判断三角形的远近 . 因此不能使用画家算法

 

所以为了解决这个问题 , 引入了深度缓存(Z-Buffer).

深度缓存 : 对像素进行操作, 算法要求我们在绘制场景时保存物体的深度信息,这样在绘制后会生成两个图:一个图(帧缓存)用来保存颜色信息,一个图(深度缓存)用来保存深度信息。这个额外生成的深度图(depth buffer)就可以帮助我们来维护物体的遮挡信息,深度小的会覆盖深度大的像素信息。

左为要生成的图 , 右为保存的深度信息.

 

 

深度缓存算法 : 复杂度为( o(n) )

伪代码如下:

第一层for : 遍历每个三角形

第二层for: 遍历每个三角形的像素点

If (遍历的像素点的深度 < 深度信息里这个位置的像素点深度):

{

        目前所遍历的像素点将该位置像素覆盖掉

        重新加载深度信息里的信息(就是保存目前所遍历的像素点的深度);

}

Else:不做任何操作.

 

如下为计算深度的过程 :

一开始全部像素设为无限远, 遇到了一个三角形全部都是深度5的像素, 则更新对应的三角形所覆盖的位置. (深度越小, 距离相机越近)

 

 

目前已学的图形管线如下:

 Modeling(模型变换), Viewing(观测变换), Projection(投影变换), 视口变换, 光栅化, 依次处理

 

 

光照

Specular highlights(高光)

Diffuse reflection(漫反射)

Ambient lighting(间接光)环境光照

 

需要定义光照位置, 光照点(shading point), 相机位置, 光照方向l, 相机朝向v, 法线n

color 和 shininess(亮泽度)是物体的材质, 这里无需定义.

 

 

着色是局部性, 只看自身, 不考虑遮挡产生的阴影.

如下,  除了球的阴影并未显示.其他都正常

 Diffuse refection漫反射 : 光照到达光照点后, 均匀地反射到附近

 给定一个shading point, 根据光照方向和法线方向的角度得出接收到多少光, cos角度

 从光源到某个位置的能量是递减的(I表示强度,  r表示距离)

 

漫反射公式解析:

①点光源到达shading point 的距离r  ②点光源的强度I : 得出到达shading point 的能量多少

③光照方向L(单位向量)与 ④平面法线n(单位向量)的点乘 : 得出共有多少能量被接收

最后根据上面两个求出的结果, 可以求出因为漫反射, 导致该物体的明暗.

max(0, n*l) : 防止点乘结果为负数,导致没意义的结果.

漫反射和v相机位置无关, 从哪个位置看, 呈现的光照效果是一样的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值