目录
概述
通过多边形分格化和几何图元遍历来解决OSG绘制凹多边形并计算其面积的问题。在OpenGL/OSG中,由于效率的原因,默认是直接显示的简单的凸多边形。如果直接强行显示凹多边形,渲染结果是不确定的。所以对于复杂的凹多边形,需要将其分解成简单的凸多边形,这个过程就是多边形分格化。在OSG中是通过osgUtil::Tessellator类来实现多边形分格化的。
分格化几何体的类型:
enum TessellationType {
TESS_TYPE_GEOMETRY, // tessellate everything in the geometry object,分格化几何体
TESS_TYPE_DRAWABLE, // tessellate each polygon, triangles & quads drawables in geometry separately分格化几何体中的Drawable
TESS_TYPE_POLYGONS // tessellate ONLY polygon drawables in geometry separately只分格化几何体中的多边形
};
多边形分格化还有一个很重要的概念,环绕数。
《OpenGL编程指南》中:“只有一条轮廓线时,每点的环绕数为该绕轮廓一周的过程中经过该点的次数,逆时针为正,顺时针为负。有多条轮廓线时,将分别绕个轮廓线一周得到的环绕数相加。每个点都对应一个有符号的整数值,在同一个区域内,所有点的环绕数都相同。实际这个定义有误,在实际编程中,如对下面程序左下角和右下角的轮廓线而言,此定义是错误的。本人通过实际编程认为环绕数应该针对区域中的点,而