Я пытаюсь нарисовать текст в PIL, конвертировать пиксели в что-то, что я могу бросить в glDrawPixels и отобразить его. Я не уверен, что я делаю неправильно; Я не думаю, что это часть PIL, так как я провел немного тестирования, и все, кажется, работает правильно с PIL. Я немного теряю, поскольку код ничего не отображает, но не вызывает у меня никаких ошибок, поэтому я не знаю, с чего работать.Python PIL text → glDrawPixels
import PIL
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
from OpenGL.GL import *
class tooltipText(object):
def __init__(self, x, y, text, font, fontsize, colour):
self._x = x
self._y = y
self._text = text
self._font = font
self._fontsize = fontsize
self._colour = colour
self._pBits = None
def makeText(self):
font = ImageFont.truetype(self._font,self._fontsize)
img=Image.new("RGBA", (300,200),(self._colour[0],self._colour[1],self._colour[2],0))
draw = ImageDraw.Draw(img)
draw.text((0, 200-self._fontsize),self._text,self._colour,font=font)
img_flip = img.transpose(Image.FLIP_TOP_BOTTOM)
pBits = img_flip.tobytes("raw", "RGBA")
self._pBits = pBits
return self._pBits
def displayText(self):
glEnable(GL_TEXTURE_2D)
glPushMatrix()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslate(0, 0,0)
glRasterPos(self._x,self._y)
glDrawPixels(300, 200, GL_RGBA, GL_UNSIGNED_BYTE, self._pBits)
glEnd()
glDisable(GL_TEXTURE_2D)
glPopMatrix()
Edit: После ковыряться немного я нашел решение, которое работает:
def displayText(self):
vPort = glGetIntegerv(GL_VIEWPORT)
glPushMatrix()
glLoadIdentity()
glTranslate(self._x, self._y,0)
glRasterPos(0,0,0)
glOrtho(0, vPort[2], 0, vPort[3], -1, 1)
glMatrixMode(GL_MODELVIEW)
glDrawPixels(300, 200, GL_RGBA, GL_UNSIGNED_BYTE, self._pBits)
glEnd()
glDisable(GL_TEXTURE_2D)
glPopMatrix()