我画了一个矩形(4个线段),但它们太薄了。如何更改每条线的粗细?
以下我的例子给了我这个:
if __name__ == '__main__':
app = App()
game_area = None
labels = [pyglet.text.Label("0"*8,
font_name = "Times New Roman",
font_size=18,
color = (255, 0, 0, 255),
x = app.width // 2,
y = app.height // 2 - n,
anchor_x = "center",
anchor_y = "center") for n in range(0, 100, 18)]
@app.event
def on_draw():
app.clear()
[label.draw() for label in labels]
pyglet.graphics.draw(4, pyglet.gl.GL_LINES,
("v2f", (0, 0, 0, app.height, app.width / 2, app.height, app.width / 2, 0))
)
pyglet.app.run()
答案 0 :(得分:6)
您可以通过调用glLineWidth来更改行的宽度。这是通过像这样的pyglet实现的:
pyglet.gl.glLineWidth(desired_line_size)
如果需要不同厚度的线条,则必须在绘制每条线之前再次使用新的厚度调用该函数。否则,您可以在初始化中设置厚度并保留。
答案 1 :(得分:2)
我意识到实际上我必须绘制三角形以实现"厚度":
def draw_game_area():
pyglet.graphics.draw(24, pyglet.gl.GL_TRIANGLES,
("v2f", (ORIGIN, ORIGIN, ORIGIN, app.height, LINE_SEGMENT_THICKNESS, ORIGIN,
ORIGIN, app.height, LINE_SEGMENT_THICKNESS, app.height, LINE_SEGMENT_THICKNESS, ORIGIN,
ORIGIN, ORIGIN, ORIGIN, LINE_SEGMENT_THICKNESS, app.width / 2, ORIGIN,
ORIGIN, LINE_SEGMENT_THICKNESS, app.width / 2, LINE_SEGMENT_THICKNESS, app.width / 2, ORIGIN,
app.width / 2 - LINE_SEGMENT_THICKNESS, app.height, app.width / 2, app.height, app.width / 2, ORIGIN,
app.width / 2 - LINE_SEGMENT_THICKNESS, app.height, app.width / 2, ORIGIN, app.width / 2 - LINE_SEGMENT_THICKNESS, ORIGIN,
ORIGIN, app.height, app.width / 2, app.height, app.width / 2, app.height - LINE_SEGMENT_THICKNESS,
ORIGIN, app.height, ORIGIN, app.height - LINE_SEGMENT_THICKNESS, app.width / 2, app.height - LINE_SEGMENT_THICKNESS))
)
答案 2 :(得分:0)
创建点并在它们之间绘制多边形以创建所需的厚度。
我创建了一个function on desmos,它需要两个点,并找到新的点以创建所需的厚度T
。
我创建了一个函数来对每个点执行此操作。这可能不是最有效的方法,但是可以。
此函数期望将pyglet.graphics.vertex_list().vertices
作为vertices
的输入,并将任何数字作为thickness
的输入。
def add_thickness(vertices,thickness):
from math import atan,sin,cos,pi
output = list()
i = 2
while i < len(vertices):
a = vertices[i-2:i]
b = vertices[i:i+2]
dy = b[1]-a[1]
dx = b[0]-a[0]
try:
a = -(dx/dy)
t = atan(a)
except:
t = pi/2
output.append((thickness/2)*cos(t)+b[0]);output.append((thickness/2)*sin(t)+b[1])
output.append(-(thickness/2)*cos(t)+b[0]);output.append(-(thickness/2)*sin(t)+b[1])
i+=2
return output
请注意,此函数不会为顶点列表中的第一个顶点创建点。