如何肯定一個閉合路徑(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); }