使用 Pyglet 批量绘制 GL_LINE_STRIP
Drawing GL_LINE_STRIP using Pyglet in a Batch
我正在尝试绘制两个 GL_LINE_STRIP
对象,但它们彼此相连。
Pyglet 文档说:
When using GL_LINE_STRIP
, GL_TRIANGLE_STRIP
or GL_QUAD_STRIP
care must be taken to insert degenerate vertices at the beginning and end of each vertex list. For example, given the vertex list:
A, B, C, D
the correct vertex list to provide the vertex list is:
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()
一组中的顶点被视为一个单一的顶点列表。参见 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))
我正在尝试绘制两个 GL_LINE_STRIP
对象,但它们彼此相连。
Pyglet 文档说:
When using
GL_LINE_STRIP
,GL_TRIANGLE_STRIP
orGL_QUAD_STRIP
care must be taken to insert degenerate vertices at the beginning and end of each vertex list. For example, given the vertex list:
A, B, C, D
the correct vertex list to provide the vertex list is:
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()
一组中的顶点被视为一个单一的顶点列表。参见 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))