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

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



PyOpenGL

日記

2008年目標(2008/1/1)になっていたOpenGLの勉強を始めた。3Dは以前DirectXをやっていたことがあったが、あまりに難しくて挫折したことがある・・・今はPCをMacにしてしまったこともあり、DirectXは使えないので代わりにOpenGLを使うことにした。OpenGLはさまざまな言語から使うラッパーがあるのでOpenGLのPythonラッパーであるPyOpenGLを調べている。PythonラッパーといってもOpenGLのコマンド名はほとんどそのまま。たとえば、OpenGLのバイブル(またの名を赤本)に出てくるC言語のhello.cをPythonで書くと下のようになる。

import sys
from OpenGL.GL import *
from OpenGL.GLUT import *

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    
    # draw white polygon
    glColor3f(1.0, 1.0, 1.0)
    glBegin(GL_POLYGON)
    glVertex3f(0.25, 0.25, 0.0)
    glVertex3f(0.75, 0.25, 0.0)
    glVertex3f(0.75, 0.75, 0.0)
    glVertex3f(0.25, 0.75, 0.0)
    glEnd()
    glFlush()

def init():
    # select clearing color
    glClearColor(0.0, 0.0, 0.0, 0.0)
    
    # initialize viewing values
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0)

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
    glutInitWindowSize(250, 250)
    glutInitWindowPosition(100, 100)
    glutCreateWindow("hello")
    init()
    glutDisplayFunc(display)
    glutMainLoop()

if __name__ == "__main__":
    main()

関数名はC言語とまったく同じ!ネットにあるC言語のソースも簡単にPythonに翻訳できる。

あと3次元モデリングツールであるBlenderというソフトの使い方もちょっとずつ勉強を始めた。すごく複雑なソフトでまともなオブジェクトが作れるまでどれくらいかかるのかわからないけれどスライムくらい作れるようになりたいな(笑)3次元のゲームプログラミングはまったく未知の領域なので何だか楽しくなってきた。次元が1個増えるだけでプログラミング方法がこんなに変わるんだなぁ。とりあえずの目標は3次元Boids(Appletあり)!

OpenGLプログラミングガイド 原著第5版

OpenGLプログラミングガイド 原著第5版