テクスチャに頂点配列を使う。
import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from PIL import Image def load_texture(): img = Image.open("sample2.png") w, h = img.size glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, img.tobytes()) def display(): glClear(GL_COLOR_BUFFER_BIT) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glEnable(GL_BLEND) glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_TEXTURE_COORD_ARRAY) glEnable(GL_TEXTURE_2D) glVertexPointerf([ (-1.0, -1.0, 0.0), ( 1.0, -1.0, 0.0), (-1.0, 1.0, 0.0), ( 1.0, 1.0, 0.0), ]) glTexCoordPointerf([ (0.0, 1.0), (1.0, 1.0), (0.0, 0.0), (1.0, 0.0), ]) glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) glDisable(GL_TEXTURE_2D) glDisable(GL_BLEND) glFlush() def main(): glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA) glutInitWindowSize(300, 300) glutCreateWindow(b"TextureSample3") glutDisplayFunc(display) glClearColor(0.0, 0.0, 1.0, 1.0) load_texture() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glutMainLoop() if __name__ == '__main__': main()
解説
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
で、テクスチャの頂点配列を有効にする。
glTexCoordPointerf([ (0.0, 1.0), (1.0, 1.0), (0.0, 0.0), (1.0, 0.0), ])
で、テクスチャの頂点配列を定義する。
glVertexPointerfで定義したテクスチャを貼るポリゴンの頂点と順番を一致させる。
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
で、テクスチャを描画する。
この例で、GL_TRIANGLE_STRIPで四角形を描画している。