是否可以用Pyglet绘制凸多边形? 如果是,我该如何绘制它?我只知道n个顶点及其2D坐标。
答案 0 :(得分:0)
您可以使用原语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
......和一个例子
答案 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()