Posts Tagged ‘2D图形学’

三角形光栅化是传统图形渲染管线的最后一步,也是最重要的一步,需要插值计算出三角形内部每个像素的颜色值,并根据z值进行深度测试以决定像素的远近关系。

光栅化的算法用掉了我好几天的时间,一开始是用Barycentric Coordinates算法进行的,结果帧率只有杯具的3,想办法把很多的乘除法改成了加减法还是没有起色,看来浮点数运算还是坑爹啊,于是决定用经典的Bresenham算法了。但是Bresenham算法是用来画线的,对于光栅化三角形来说还要考虑三角形内部针对顶点颜色的插值,于是我将其变成了Bresenham插值算法……

Read the rest of this entry »

Barycentric Coordinates算法,即“重心坐标系插值算法”,本质是通过计算2D空间中任意一点到三角形三边的相对距离,来确定点是否在三角形内部。这个算法比起常见的扫描线插值算法,编程更容易(不需要判断三角形类型),而且具有更高的精确度(避免了计算斜率时带来的误差)。Barycentric Coordinates算法不但可以判断像素点是否需要绘制,而且可以直接插值计算出需要绘制的像素点的颜色或纹理映射坐标。不过,我不知道计算量是否要比扫描线插值算法大,希望有感兴趣的朋友能比较一下。

本文首先简单讲一下算法的原理,然后给出代码实现。

Read the rest of this entry »

World Line
Time Machine
Online Tools