在 Pyglet 中绘制凸多边形
Drawing convexity polygon in Pyglet
Pyglet可以画凸多边形吗?
如果是,我该如何绘制它?我只知道n个顶点和它们的二维坐标。
您可以使用原语 GL_POLYGON
(甚至可以尝试 GL_LINE_LOOP
)。
检查文档...
https://pyglet.readthedocs.io/en/pyglet-1.2-maintenance/api/pyglet/pyglet.graphics.html
http://pyglet.readthedocs.io/en/pyglet-1.3-maintenance/programming_guide/graphics.html
...和一个例子
Pyglet GL_QUADS and GL_POLYGON not working properly
是的,你可以做到。
只需使用以下代码片段即可感受一下该功能。
玩一下模式:
GL_POLYGON,
GL_TRIANGLES,
GL_TRIANGLE_FAN 和
GL_TRIANGLE_STRIP.
鼠标左键单击按钮增加 window 中的点数。单击三次后显示第一张图。 Del-Button 清除 window.
GL_POLYGON 和 GL_TRIANGLE_FAN 的行为相同,第一个点是凸多边形的锚点,用于点列表中的每个绘制三角形。
GL_TRIANGLE 绘制三角形需要 3 个点,然后是接下来的 3 个点,依此类推。
用GL_TRIANGLE_STRIP你可以画出每一个复杂的结构。但是你要小心给定的点。有时,您必须多次访问一个点。
第一个三角形由点 1-3 绘制。
第二个三角形由点 2-4 绘制,然后是 3-5、4-6 等等。
import pyglet
from pyglet.window import key
global n
global vertices
global colors
window = pyglet.window.Window()
n = 0
vertices = []
colors = []
polygon = None
main_Batch = pyglet.graphics.Batch()
@window.event
def on_draw():
window.clear()
main_Batch = pyglet.graphics.Batch()
if n > 2:
polygon = main_Batch.add(n, pyglet.gl.GL_POLYGON, None,
('v2i', vertices),
('c3B', colors))
main_Batch.draw()
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.DELETE:
global n;
global vertices
global colors
vertices = []
colors = []
n = 0
@window.event
def on_mouse_press(x, y, button, modifiers):
if button == pyglet.window.mouse.LEFT:
global n
vertices.append(x)
vertices.append(y)
n = n + 1
colors.append(255)
colors.append(255)
colors.append(255)
pyglet.app.run()
Pyglet可以画凸多边形吗? 如果是,我该如何绘制它?我只知道n个顶点和它们的二维坐标。
您可以使用原语 GL_POLYGON
(甚至可以尝试 GL_LINE_LOOP
)。
检查文档...
https://pyglet.readthedocs.io/en/pyglet-1.2-maintenance/api/pyglet/pyglet.graphics.html
http://pyglet.readthedocs.io/en/pyglet-1.3-maintenance/programming_guide/graphics.html
...和一个例子
Pyglet GL_QUADS and GL_POLYGON not working properly
是的,你可以做到。 只需使用以下代码片段即可感受一下该功能。 玩一下模式: GL_POLYGON, GL_TRIANGLES, GL_TRIANGLE_FAN 和 GL_TRIANGLE_STRIP.
鼠标左键单击按钮增加 window 中的点数。单击三次后显示第一张图。 Del-Button 清除 window.
GL_POLYGON 和 GL_TRIANGLE_FAN 的行为相同,第一个点是凸多边形的锚点,用于点列表中的每个绘制三角形。
GL_TRIANGLE 绘制三角形需要 3 个点,然后是接下来的 3 个点,依此类推。
用GL_TRIANGLE_STRIP你可以画出每一个复杂的结构。但是你要小心给定的点。有时,您必须多次访问一个点。 第一个三角形由点 1-3 绘制。 第二个三角形由点 2-4 绘制,然后是 3-5、4-6 等等。
import pyglet
from pyglet.window import key
global n
global vertices
global colors
window = pyglet.window.Window()
n = 0
vertices = []
colors = []
polygon = None
main_Batch = pyglet.graphics.Batch()
@window.event
def on_draw():
window.clear()
main_Batch = pyglet.graphics.Batch()
if n > 2:
polygon = main_Batch.add(n, pyglet.gl.GL_POLYGON, None,
('v2i', vertices),
('c3B', colors))
main_Batch.draw()
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.DELETE:
global n;
global vertices
global colors
vertices = []
colors = []
n = 0
@window.event
def on_mouse_press(x, y, button, modifiers):
if button == pyglet.window.mouse.LEFT:
global n
vertices.append(x)
vertices.append(y)
n = n + 1
colors.append(255)
colors.append(255)
colors.append(255)
pyglet.app.run()