頂点配列を使って描画を行う。
import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * def display(): glClear(GL_COLOR_BUFFER_BIT) glEnableClientState(GL_VERTEX_ARRAY) glColor3f(1.0, 0.0, 0.0) glVertexPointerf([ ( 0.0, 1.0, 0.0), (-0.5, 0.0, 0.0), ( 0.5, 0.0, 0.0), ]) glDrawArrays(GL_TRIANGLES, 0, 3) glColor3f(0.0, 1.0, 0.0) glVertexPointerf([ (-0.5, 0.0, 0.0), (-0.5, -1.0, 0.0), ( 0.5, 0.0, 0.0), ( 0.5, -1.0, 0.0), ]) glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) glFlush() def main(): glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA) glutInitWindowSize(300, 300) glutCreateWindow(b"sample2") glutDisplayFunc(display) glClearColor(0.0, 0.0, 1.0, 1.0) glutMainLoop() if __name__ == '__main__': main()
解説
頂点配列を使用するには、
glEnableClientState(GL_VERTEX_ARRAY)
で、頂点配列を有効にする。
次に、頂点配列を定義する。PyOpenGLでは、glVertexPointerfを使うことで、頂点のタプルのリストをPythonの組み込み型のまま直接使用できる。
上記の例では、三角形の頂点を
glVertexPointerf([ ( 0.0, 1.0, 0.0), (-0.5, 0.0, 0.0), ( 0.5, 0.0, 0.0), ])
で定義している。
次に、定義した頂点配列を使用して、glDrawArraysで三角形を描画する。引数にGL_TRIANGLESを指定することで三角形の描画になる。
GL_TRIANGLES以外にもいくつか描画方法がある。詳しくは、マニュアルを参照。
GL_TRIANGLE_STRIP
GL_TRIANGLE_STRIPを使用すると四角形を描画することができる。
4つの頂点を定義して、頂点番号(0, 1, 2)と(1, 2, 3)の2つの三角形を描画する。
上記の例では、
glVertexPointerf([ (-0.5, 0.0, 0.0), (-0.5, -1.0, 0.0), ( 0.5, 0.0, 0.0), ( 0.5, -1.0, 0.0), ])
で、4つの頂点を定義して、
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
で、GL_TRIANGLE_STRIPを使用して四角を描画している。