我在这里找到了这个算法,只有一件事让我困惑:
Clear the stencil buffer to 1.
Pick an arbitrary vertex v0, probably somewhere near the polygon to reduce floating-point errors.
For each vertex v[i] of the polygon in clockwise order:
let s be the segment v[i]->v[i+1] (where i+1 will wrap to 0 when the last vertex is reached)
if v0 is to the "right" of s:
draw a triangle defined by s, v[i], v[i+1] that adds 1 to the stencil buffer
else
draw a triangle defined by s, v[i], v[i+1] that subtracts 1 from the stencil buffer
end for
fill the screen with the desired color/texture, testing for stencil buffer values >= 2.
By "right of s" I mean from the perspective of someone standing on v[i] and facing v[i+1]. This can be tested by using a cross product:
cross(v0 - v[i], v[i+1] - v[i]) > 0
令我困惑的部分是我需要绘制一个由 S、V[i]、V[i + 1] 定义的三角形。如果 S 是段 v[i]->v[i+1] 那么这怎么可能?
谢谢
最佳答案
如果我没记错的话,你必须绘制的三角形是 v0 - v[i] - v[i+1]
关于c++ - 帮助理解这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538001/