开发过程中有这么个需求做cpu端2d的三角形光栅化,这个做法真是够简洁(我自己开始想的就没这个简洁, 囧)。
http://courses.cms.caltech.edu/cs171/barycentric.pdf
算法:
如果想用p0,p1,p2往一个buffer上画,
先用bycentric coordinate来把buffer上一个点表示就是:p=alpha*p0+beta*p1+gamma*p2;
这里alpha+beta+gamma=1;
如果alpha, beta, gamma都在[0,1],那么这个点就是在triangle里面。
这个bycentric coordinate另外一个好处是,除了判断是不是在triangle里面,还可以用来插值uv,color这种,带入alpha*x0+beta*x1+gamma*x2就可以了。
bycentric coordinate计算:
两个图直接搞定:
其他:
其他还有一些更通用的,基于scan line的算法,比如这个:http://www.cs.uu.nl/docs/vakken/gr/resources/08-triangles.slides.pdf
不过时间不多,就不一一看了,暂且心向往之