opengl set textur Farbe mit vertex color
Da brauche ich anzeigen, um eine große Anzahl von Etiketten, dass sich unabhängig voneinander bewegen, ich brauche zum Rendern eines Labels in pyglet eine textur (sonst wird die Aktualisierung der vertex-Liste, für jede Glyphe ist zu langsam).
Habe ich eine Lösung um dies zu tun, aber mein problem ist, dass die textur, die die Glyphen enthält, die schwarz ist, aber ich möchte es rot sein. Siehe Beispiel unten:
from pyglet.gl import *
def label2texture(label):
vertex_list = label._vertex_lists[0].vertices[:]
xpos = map(int, vertex_list[::8])
ypos = map(int, vertex_list[1::8])
glyphs = label._get_glyphs()
xstart = xpos[0]
xend = xpos[-1] + glyphs[-1].width
width = xend - xstart
ystart = min(ypos)
yend = max(ystart+glyph.height for glyph in glyphs)
height = yend - ystart
texture = pyglet.image.Texture.create(width, height, pyglet.gl.GL_RGBA)
for glyph, x, y in zip(glyphs, xpos, ypos):
data = glyph.get_image_data()
x = x - xstart
y = height - glyph.height - y + ystart
texture.blit_into(data, x, y, 0)
return texture.get_transform(flip_y=True)
window = pyglet.window.Window()
label = pyglet.text.Label('Hello World!', font_size = 36)
texture = label2texture(label)
@window.event
def on_draw():
hoff = (window.width / 2) - (texture.width / 2)
voff = (window.height / 2) - (texture.height / 2)
glClear(GL_COLOR_BUFFER_BIT)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glClearColor(0.0, 1.0, 0.0, 1.0)
window.clear()
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture.id)
glColor4f(1.0, 0.0, 0.0, 1.0) #I'd like the font to be red
glBegin(GL_QUADS);
glTexCoord2d(0.0,1.0); glVertex2d(hoff,voff);
glTexCoord2d(1.0,1.0); glVertex2d(hoff+texture.width,voff);
glTexCoord2d(1.0,0.0); glVertex2d(hoff+texture.width,voff+texture.height);
glTexCoord2d(0.0,0.0); glVertex2d(hoff, voff+texture.height);
glEnd();
pyglet.app.run()
Irgendeine Idee, wie konnte ich diese Farbe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen Sie
glEnable(GL_COLOR_MATERIAL)
. Dies macht die textur, Farbe mischen, mit dem aktuellen OpenGL-Farbe. Sie können auch dieglColorMaterial
Funktion, um zu bestimmen, ob die vorne/hinten/beide jedes polygon betroffen sein sollte. Docs hier.Nicht, dass, wenn Sie verwenden, decaling, durch
glTexEnv()
?