如何:pyglet 中基元的网格数组和形状的动态填充



我正在尝试在网络模拟工具中可视化网络负载。我想在窗口(例如 4x4 网状网络)中将网络节点显示为正方形网格,在那里我可以根据节点上的流量单独选择每个正方形的填充颜色(流量信息必须从转储文件中读取,但那是以后的)。我正在尝试看看是否可以为此使用pyglet。例如,假设我们有一个 2x2 网络(4 个正方形)。我想要一个 2x2 的正方形矩阵,我可以在其中单独更改每个元素的填充颜色。我是初学者,到目前为止,在查找了很多参考资料后,我已经学会了画一个填充的正方形。请参阅代码:

import sys, time, math, os, random
from pyglet.gl import *
window = pyglet.window.Window()
label = pyglet.text.Label('Simulation', 
                          font_name='Times New Roman', 
                          font_size=16,
                          color=(204,204,0,255),      #red font (255,0,0) opacity=255
                          x=window.width, y=window.height,
                          anchor_x='right', anchor_y='top') 
class FilledSquare:
    def __init__(self, width, height, xpos, ypos):
        self.xpos = xpos
        self.ypos = ypos
        self.angle = 0
        self.size = 1
        x = width/2.0
        y = height/2.0
        self.vlist = pyglet.graphics.vertex_list(4, ('v2f', [-x,-y, x,-y, -x,y, x,y]), ('t2f', [0,0, 1,0, 0,1, 1,1]), ('c3B',(0,255,0,0,255,0,0,255,0,0,255,0)))
    def draw(self,w,h,x,y):
        self.width=w
        self.height=h
        self.xpos=x
        self.ypos=y
        glPushMatrix()
        glTranslatef(self.xpos, self.ypos, 0)
        self.vlist.draw(GL_TRIANGLE_STRIP)        
        glPopMatrix()

@window.event
def on_draw():
    window.clear()
    glClearColor(0, 0.3, 0.5, 0)
    glClear(GL_COLOR_BUFFER_BIT)
    label.draw()
    square1.draw(60,60,460,240)

square1 = FilledSquare(30, 30, 100, 200)
pyglet.app.run()
  1. 我认为通过这种方式,填充颜色在初始化时是静态的。如何传递填充颜色?
  2. 如何创建一个 FilledSquare 的 2D 数组(也许像 square[i][j] 这样的东西,我可以循环访问它。

让我知道是否有可能。

我从 pyglet-users google 组中的 Adam 那里得到了一些建议。他们在这里:

  1. 由于您使用的是即时模式,因此您最好不要将顶点颜色作为顶点列表的一部分传递,而是在绘制之前使用 glColor* 设置颜色,例如

    glColor3f(0.0, 1.0, 0.0)

  2. 您可以将对象放入列表中,以便您可以拥有

squares = [[FilledSquare(...), FilledSquare(...)], [FilledSquare(...

), FilledSquare(...)]]

谢谢亚当(如果你看到这个),它真的很有帮助。

最新更新