Graphics 什么';在实现painter';s算法?
我正在写一个图形,有人建议我使用a或来处理这个问题 我是在HTML5的画布上写这篇文章的,所以使用z缓冲区似乎非常昂贵。例如,如果它是一个500x500的画布,并且必须在10个多边形上循环,那么在CPU中每帧将进行2500000次迭代。我不知道这是否是一个大数字,但这似乎是一个错误的方式来做这个应用程序 画家算法似乎更合适。基本步骤是:Graphics 什么';在实现painter';s算法?,graphics,3d,Graphics,3d,我正在写一个图形,有人建议我使用a或来处理这个问题 我是在HTML5的画布上写这篇文章的,所以使用z缓冲区似乎非常昂贵。例如,如果它是一个500x500的画布,并且必须在10个多边形上循环,那么在CPU中每帧将进行2500000次迭代。我不知道这是否是一个大数字,但这似乎是一个错误的方式来做这个应用程序 画家算法似乎更合适。基本步骤是: 1. Sort polygons based on their "z". 2. Paint all polygons, but paint the ones f
1. Sort polygons based on their "z".
2. Paint all polygons, but paint the ones farthest away first.
但我不知道如何找到他们的z。假设我们从上往下看以下多边形:
如果我只是找到最大z(离屏幕最远),红色会被认为离屏幕更远。所以它会先把红色涂成红色,然后再把橙色涂成红色,即使红色在橙色前面
对这些多边形进行排序的正确方法是什么?或者更一般地说,在实现painters算法时,如何确定多边形的顺序
编辑:这就是为什么我害怕滚动我自己的z缓冲区(在这个5岁的i7上,通过每个像素并随机分配一个10FPS的颜色)。三个三角形可以循环覆盖彼此,这意味着不存在通用排序算法。 相反,该问题通常通过沿重叠边切割重叠三角形来解决,形成新的三角形/多边形,这些三角形/多边形完全位于彼此的任一侧
所讨论的两个多边形可以按照顶点与另一个多边形平面方程的有符号距离进行排序。Z-排序通常比Z-缓冲慢。多边形越多,最好使用Z缓冲区。你关于迭代的假设是错误的。Z缓冲不是在每个多边形的基础上迭代,而是在每个像素的基础上迭代 所以不管你有多少个多边形。重要的是以像素为单位渲染的区域(每个多边形所属的重叠区域多次计算一次)。因此,您不能期望对于
500x500
屏幕和10
多边形将得到10*500*500
迭代
我不使用HTML5画布编写代码,但除非你能直接访问像素和阴影缓冲区,并自己对多边形进行栅格化(或者像GLSL中的片段着色器一样访问),否则你将很难实现z缓冲,即使它只是一个简单的if条件。我认为也可以用模板或阿尔法蒙版来完成,但从来没有这样做过
z排序通常用于以下情况: