在Pyglet中绘制凸面多边形

时间:2018-03-28 09:30:11

标签: python opengl pyglet

是否可以用Pyglet绘制凸多边形? 如果是,我该如何绘制它?我只知道n个顶点及其2D坐标。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

是的,cou可以做到。 只需阅读以下代码片段,即可了解该功能。 玩一些模式: GL_POLYGON, GL_TRIANGLES, GL_TRIANGLE_FAN和 GL_TRIANGLE_STRIP。

鼠标左键单击可增加窗口中的点。单击三次后显示第一个图形。 Del-Button清除窗口。

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