系列教程4: 光栅化和Z-Buffer

本文介绍了3D渲染中的光栅化算法和Z-Buffer技术。通过光栅化算法填充三角形,利用Z-Buffer解决前后景物体遮挡问题。文章详细阐述了算法逻辑,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

系列教程4: 光栅化和Z-Buffer

 

我们跳过教程3,因为教程3主要是教我们加载Blender导出的模型网格。我们暂时不需要去做这些工作。依然以cube为例足以。

 

到目前为止,我们的渲染函数可以进行简单的线框渲染。我们现在开始看看如何用光栅化算法来填充三角形。然后,我们将看到如何用Z-buffer来避免将模型背面的面绘制到前面。

 

 

光栅化

有太多不同类型的光栅化算法了。我们将在这个教程实现一个简单但是有效的光栅化算法。由于我们在CPU上运行我们的3D Soft Engine,我们必须对这部分有更多的关注。的确,它会消耗大量的CPU。而这重要的部分在今天都是由GPU来完成。

 

让我们开始一个练习。拿一张纸,开始画你能想到的所有三角形的类型。这个主意是为了找到一个通用的方法来绘制任意类型的三角形。

 

如果我们对三个顶点以y坐标的方式进行排序,即P1P2P3。我们最后只会有2种可能:


你会看到2种可能:P2在P1P3的右边 、 P2在P1P3的左边。在我们这个例子中,我们想要总是从左到右来绘制我们的线,从sx到ex。

 

此外,我们会通过移动P1.Y到P3.Y来绘制从左到右的线条。但是我们需要改变我们的逻辑当到达P2的时候,因为在这2种情况中,斜率都发生了改变。这就是为什么我们需要2步来完成绘制这个三角形。从上往下从P1.Y到P2.Y,然后从P2.Y到P3.Y,我们最终的目标。

 

如何完成我们的算法所需要理解的逻辑都在维基百科中: http://en.wikipedia.org/wiki/Slope 

这真的只是一些基础的数学知识。

 

为了对case1case2进行排序,你需要简单的计算一下斜率的倒数:

dP1P2 = P2.X - P1.X / P2.Y - P1.Y and dP1P3 = P3.X - P1.X / P3.Y - P1.Y

 

如果dP1P2 > dP1P3 则是第一个例子,即P2在右边。否则如果dP1P2 < dP1P3,则是第二个例子,即P2在左边。

 

现在我们有了算法的基本逻辑࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值