图形学原理总结

 

目录

 

灯光、摄像机的坐标空间

面法线、顶点法线和像素法线的确定

光栅化

Fragment像素如何差值各种数据(顶点颜色、UV、Z-Buffer)

Texture采样

(1)Texture Magnification

(2)Mipmap


灯光、摄像机的坐标空间

  假设某一个灯光、摄像机原始的坐标空间为(u、v、w),经过平移矩阵和旋转矩阵相乘后,这个灯光或摄像机的坐标空间为(u' ,v' ,w')。此时因为只有平移和旋转,所以u' ,v' ,w' 还是单位向量。此时有一个顶点A(x,y,z),则A顶点在灯光或摄像机坐标空间的位置(x' ,y' ,z')=(u' ,v' ,w')(x,y,z)= u' x + v’y + w'z 。u'x=|u'||x|cosa,又因u'是单位向量,所以u'x=|x|cosa,即x在向量u'上的投影


 

面法线、顶点法线和像素法线的确定

   面法线:可由面的两条边叉乘,得到的向量就是面的法向量

   顶点法线: 一个顶点会被几个不同的面占用,所以顶点法线可由面法线求和再平均得到 

像素法线:由顶点法线差值得到

光栅化

判断屏幕上任一点像素是否在三角形内,可通过三条边与顶点到P点的向量依次做叉积,如果叉积结果为同方向向量,则像素在三角形内。

//实际中不需要遍历所有像素,只要计算三角形的AABB包围盒包含的像素就可以
for ( int x = 0; x < xmax; ++X)
    for ( int y = 0; y < ymax; ++y)
        image[x][y] = inside(tri,
                             x+0.5,
                             y+0.5); //+0.5代表像素中心点

 

 

 

Fragment像素如何差值各种数据(顶点颜色、UV、Z-Buffer)

Fragment像素可根据自身二维位置坐标算出自身在三角形内的重心坐标系数,然后使用这个系数乘以三角形三个顶点的各种数据(例如UV,顶点颜色,法线等),从而得到自身的差值。

注意:由于经过投影后三角形的形状可能会改变,此时如果是计算和三维相关的数据(例如深度)的差值,使用三角形顶点二维坐标计算的重心坐标系数是不准确的。这是应该将该Fragment像素和三角形顶点由屏幕坐标转换为世界空间坐标,然后求该Fragment像素的重心坐标系数,然后使用该系数乘以三个顶点的深度值,得到深度差值,最后返回该Fragment像素的深度值

 

Texture采样

       Fragment像素根据UV值可以去采样texture,会遇到texture精度过高或者过低的情况

(1)Texture Magnification

当Pixel精度 > texel时,对texture采样会出现锯齿,此时,可以在texture上找到Pixel(下图中红点)周围的texel进行Bilinear Interpolation(此方法也可以用于恢复低分辨texture到高分辨率)

                 

(2)Mipmap

针对texel精度高于Fragment像素精度这种情况,会出现摩尔纹,可使用mipmap避免

即当三角形很小时,光栅化后所分配的Fragment pixel很少,而此三角形UV对应的texel数量很多,造成采样不足。此时可根据相邻两个pixel中心之间所占texel个数(或距离)来选择所要采样的mipmap层数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值