在 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()