読者です 読者をやめる 読者になる 読者になる

TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

PyOpenGLを使ってみる その5(頂点配列にnumpyを使う)

PyOpenGL OpenGL

前回は頂点配列にPythonの組み込みのタプルとリストを使用したが、numpyを使うこともできる。
座標変換はOpenGLの機能で行った方が簡単だが、場合によってはnumpyを使用できると便利である。

import sys
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import numpy as np

def display():
    glClear(GL_COLOR_BUFFER_BIT)

    glEnableClientState(GL_VERTEX_ARRAY)

    glColor3f(1.0, 0.0, 0.0)

    glVertexPointerf(np.array([
        [ 0.0,  1.0, 0.0],
        [-0.5,  0.0, 0.0],
        [ 0.5,  0.0, 0.0],
        ], dtype=np.float))
    glDrawArrays(GL_TRIANGLES, 0, 3)

    glColor3f(0.0, 1.0, 0.0)
    glVertexPointerf(np.array([
        [-0.5,  0.0, 0.0],
        [-0.5, -1.0, 0.0],
        [ 0.5,  0.0, 0.0],
        [ 0.5, -1.0, 0.0],
        ], dtype=np.float))
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)

    glFlush()

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGBA)
    glutInitWindowSize(300, 300)
    glutCreateWindow(b"sample3")
    glutDisplayFunc(display)
    glClearColor(0.0, 0.0, 1.0, 1.0)

    glutMainLoop()

if __name__ == '__main__':
    main()

glVertexPointerfに渡すndarrayのshapeは、(N, 3)である必要がある。