如何解决用pyglet绘制多边形会创建不需要的重叠区域
我试图用pyglet
绘制一个填充的多边形,但出现了不想要它们的重叠区域。
我的(极简)代码:
num_pts = 6
pts_seq = [500,129,505,92,114,516,93,520,129]
color= [255,255,200,100]
pyglet.graphics.draw(
num_pts,# points count
pyglet.gl.GL_POLYGON,#
('v2i',pts_seq),# data points
('c4B',color * num_pts),# color data
)
结果:
我还尝试了here的答案,并得到了相同的结果。
解决方法
Pyglet基于OpenGL。已弃用的OpenGL Primitive类型GL_POLYGON
仅能正确处理凸多边形。
您必须对多边形进行三角剖分,并且必须使用GL_TRIANGLES
,GL_TRIANGLE_STRIP
或GL_TRIANGLE_FAN
类型的Triangle primitive种类型。
例如,使用基本类型GL_TRIANGLES
并通过4个三角形将形状缝合在一起:
num_pts = 12
pts_seq = [
500,129,505,92,114,500,516,520,93,129]
color= [255,255,200,100]
pyglet.graphics.draw(
num_pts,# points count
pyglet.gl.GL_TRIANGLES,#
('v2i',pts_seq),# data points
('c4B',color * num_pts),# color data
)
或更改点的顺序并使用基本类型GL_TRIANGLE_STRIP
:
num_pts = 6
pts_seq = [505,93]
color= [255,# points count
pyglet.gl.GL_TRIANGLE_STRIP,# color data
)
,
@ Rabbib76回答了这个问题,我想用三角剖分任意多边形的策略来完成它,这不再是原始问题的一部分,因此,本文作为答案。
我的解决方案与我正在处理的代码部分的开发方式有关,即使用shapely
:
from shapely.geometry import Polygon as shPolygon
from shapely.ops import triangulate as shTriangulate
for pol_points in list_pol_points:
obj_polygon = shPolygon(self.points)
triangulated_objs = shTriangulate(obj_polygon)
for sub_obj in triangulated_objs:
if sub_obj.centroid.within(obj_polygon):
sub_obj_points = list(sub_obj.exterior.coords)
num_pts = len(sub_obj_points)
pts_seq = []
for point in sub_obj_points:
pts_seq.append(point[0])
pts_seq.append(point[1])
pyglet.graphics.draw(
num_pts,# points count
pyglet.gl.GL_POLYGON,#
('v2i',# data points
('c4B',# color data
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。