如何肯定一个闭合路径(contour)定义的是内区仍是外区?code
对于一个闭合路径的每一个边,若是必定存在另外一个点与之构成顺时针三角形,那么是内区。ci
若是一个闭合路径中存在这样一个边,没有任何点与之构成顺时针三角形,那么是外区。it
如何把一个闭合路径(内区)三角化?class
任选相邻的三个点A、B、C,它们构成两个相邻的边,而且构成三角形,中点是B;搜索这样的三角形ABC,使得ABC成顺时针方向,而且ABC不包含其它点,保存此三点,删除中点B,重复以上过程,直到路径中仅剩三个点。搜索
解释:一个内区闭合路径必然存在两个相邻的边构成顺时针三角形,不然它不可能定义内区;删除中点后,余下的点依然构成闭合路径,因此前句话还为真。co
如何绘制Glyph?void
void initializeGL() { glEnable(GL_STENCIL_TEST); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glClearStencil(0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } void paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); //outer contours glStencilMask(GL_TRUE); glStencilFunc(GL_ALWAYS, 1, 0xf); glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDrawArrays(mode, first, count); //inner contours glStencilFunc(GL_GREATER, 1, 0xf); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDrawArrays(mode, first, count); }