如何给凹多边形着色,像这样的图形,填充颜色的时候,我总是把凹的地方填平,我希望我能根据图的轮廓填充颜色
填色的时候,我总是把凹的地方填平,希望能根据图的轮廓填色
vnjpjtjt1#
不要画一个多边形。画许多三角形,它们合并就成了多边形。当然,你可以用任何你喜欢的方式来生成三角形,比如用铅笔、纸和尺子,然后输入坐标。对于此多边形,您可能会发现GL_TRIANGLE_FAN很有用,因为不需要太多更改:在多边形的中间,在顶点的开始处添加一个新的顶点,这样其他每个顶点都能看到你添加的那个顶点。OpenGL将生成从中心点到所有边缘顶点向外辐射的三角形。这对于像你这样的“大部分是凸的”多边形来说是很方便的。三角形将看起来像这样:
GL_TRIANGLE_FAN
如果多边形不是“大部分凸”的,你很可能需要使用GL_TRIANGLES,它允许你以你喜欢的方式分割它。另一个选择是绘制一个alpha纹理的四边形,并打开alpha测试。GPU将绘制一个正方形,并忽略alpha为0的角上的像素。由于你的多边形“几乎是一个正方形”,计算这些像素并忽略它们所浪费的工作可能比处理更多三角形的额外工作要少。没有办法完美地预测这一点。使用这种方法,角形状是基于像素的,而不是基于三角形的,所以如果放大,它会变成块状。
1条答案
按热度按时间vnjpjtjt1#
不要画一个多边形。画许多三角形,它们合并就成了多边形。
当然,你可以用任何你喜欢的方式来生成三角形,比如用铅笔、纸和尺子,然后输入坐标。
对于此多边形,您可能会发现
GL_TRIANGLE_FAN
很有用,因为不需要太多更改:在多边形的中间,在顶点的开始处添加一个新的顶点,这样其他每个顶点都能看到你添加的那个顶点。OpenGL将生成从中心点到所有边缘顶点向外辐射的三角形。这对于像你这样的“大部分是凸的”多边形来说是很方便的。三角形将看起来像这样:如果多边形不是“大部分凸”的,你很可能需要使用GL_TRIANGLES,它允许你以你喜欢的方式分割它。
另一个选择是绘制一个alpha纹理的四边形,并打开alpha测试。GPU将绘制一个正方形,并忽略alpha为0的角上的像素。由于你的多边形“几乎是一个正方形”,计算这些像素并忽略它们所浪费的工作可能比处理更多三角形的额外工作要少。没有办法完美地预测这一点。使用这种方法,角形状是基于像素的,而不是基于三角形的,所以如果放大,它会变成块状。