我正在尝试绘制两个GL_LINE_STRIP
对象,但它们彼此相连。
Pyglet文档说:
[使用
GL_LINE_STRIP
,GL_TRIANGLE_STRIP
或GL_QUAD_STRIP
时,必须注意在每个顶点列表的开始和结尾处插入退化的顶点。例如,给定顶点列表:
A, B, C, D
提供顶点列表的正确顶点列表是:
A, A, B, C, D, D
但是无论是否添加它绝对没有作用。
这里是代码示例:
import pyglet
window = pyglet.window.Window()
main_batch = pyglet.graphics.Batch()
p1 = [ 300, 400, 300, 400, 162, 408, 303, 453, 300, 400, 300, 400]
p2 = [ 500, 400, 500, 400, 558, 315, 586, 372, 500, 400, 500, 400]
main_batch.add(len(p1) // 2, pyglet.gl.GL_LINE_STRIP, None, ("v2i", p1))
main_batch.add(len(p2) // 2, pyglet.gl.GL_LINE_STRIP, None, ("v2i", p2))
@window.event
def on_draw():
window.clear()
main_batch.draw()
pyglet.app.run()
我该怎么做才能分离这些对象?无法使用其他批次或GL_LINES。
您必须对顶点列表进行分组:
import pyglet
window = pyglet.window.Window()
main_batch = pyglet.graphics.Batch()
grp1 = pyglet.graphics.Group()
grp2 = pyglet.graphics.Group()
p1 = [ 300, 400, 300, 400, 162, 408, 303, 453, 300, 400, 300, 400]
p2 = [ 500, 400, 500, 400, 558, 315, 586, 372, 500, 400, 500, 400]
main_batch.add(len(p1) // 2, pyglet.gl.GL_LINE_STRIP, grp1, ("v2i", p1))
main_batch.add(len(p2) // 2, pyglet.gl.GL_LINE_STRIP, grp2, ("v2i", p2))
@window.event
def on_draw():
window.clear()
main_batch.draw()
pyglet.app.run()
1组中的顶点被视为一个顶点列表。参见pyglet.graphics,因此可以将顶点列表添加到不同的组。每个组都是一个单独的网格。
我认为文档是错误的。该方法适用于GL_TRIANGLE_STRIP
或GL_QUAD_STRIP
,因为此基本类型绘制了一个填充的多边形。如果(部分)多边形的面积为0,则根本不会绘制任何内容。线图元GL_LINE_STRIP
将始终在连续顶点之间绘制一条线。请参见OpenGL Primitive。
例如GL_TRIANGLE_STRIP
:
p1 = [ 300, 400, 300, 400, 162, 408, 303, 453, 300, 400, 300, 400]
p2 = [ 500, 400, 500, 400, 558, 315, 586, 372, 500, 400, 500, 400]
main_batch.add(len(p1) // 2, pyglet.gl.GL_TRIANGLE_STRIP, None, ("v2i", p1))
main_batch.add(len(p2) // 2, pyglet.gl.GL_TRIANGLE_STRIP, None, ("v2i", p2))