第2回です。 どうも、ゆるキャン△を観たからではないですが、唐突にゴールデンウィークにキャンプを企画したyosiです。 今回はまた下準備ですが、OpenGLのバージョン指定やウィンドウの表示をしていきます。 OpenGLのバージョンは非常にややこしいのですが、最近のバージョンはかなりややこしさが軽減されていて助かります。 まずはOpenGLのバージョンを指定 glfw.init() window = glfw.create_window(640, 480, 'Hello World', None, None) glfw.make_context_current(window) glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4) glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 0) glfw.window_
Python2のコードを3で動かしたい。 2to3 http://diveintopython3-ja.rdy.jp/porting-code-to-python-3-with-2to3.html python3にはPython2コードをPython3コードに変換するツール2to3が付属しているらしい。 PyOpenGL-Demo Python3.6.1でインストールしたが、ソースコードがPython2用っぽい。 venvでgame仮想環境を作成し、インストール。以下のパスを見てみた。 /.../game/lib/python3.6/site-packages/PyOpenGL-Demo/NeHe配下にlesson1.pyのようなコードがある。 2→3 lesson1.pyファイルをコピーする(上書きされたら困るから) $ 2to3 lesson1.py -w $ 2to3 lesson1
PyOpenGLでテクスチャを表示する。 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from PIL import Image def load_texture(): img = Image.open("sample1.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)
glutMainLoopは仕様上、実行されたが最後、呼び出し元に戻ることはできない。 GLUTでの終了時のメモリの開放はOSに任せている。ただ、プロセス中に一時グラフィック表示をする場合、glutMainLoopから抜ける必要がある。そのために使う関数はfreeGLUTに用意されている。freeglutの使用はヘッダファイルのインクルードが必要である。 #include <GL/freeglut.h> glutSetOption glutMainLoop()に入る前に、glutSetOptionにて以下を指定する。 glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS); … … glutMainLoop(); glutMainLoop()から抜ける場合はglutLeaveMainLoop()を
「PyOpenGLのインストールができない!!」 「PyOpenGLが動かない・・・」 このような場合は、この記事をご覧ください。 PyOpenGLが動くまでを説明します。 本記事の内容 PyOpenGLとは?PyOpenGLのシステム要件PyOpenGLのインストールPyOpenGLの動作確認 それでは、上記に沿って解説していきます。 PyOpenGLとは? PyOpenGL公式サイト http://pyopengl.sourceforge.net/ PyOpenGLは、OpenGLとその関連APIに対するPythonバインディングです。 プログラムからOpenGLを気軽に触る場合には、最適な選択肢となります。 しかし、PyOpenGLを動かすまでがちょっと面倒です。 公式サイトを見ればわかりますが、決して親切とは言えません。 また、Googleで検索しても情報が錯綜しています。 今時の
#!/usr/bin/python # coding: utf-8 from OpenGL.GL import * from OpenGL.GLUT import * def draw(): # OpenGLバッファのクリア glClearColor(0.0, 0.5, 0.5, 0.0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # OpenGL描画実行 glFlush() # glutダブルバッファ交換 glutSwapBuffers() def setup(): glutInit(sys.argv) # RGBAモード、ダブルバッファリング有効、Zバッファ有効で初期化 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(64
The following uses ctypes to get to the OpenGL 1.5/2.0 functions not exported by PyOpenGL. See GLSL_ARB_Example for an implementation using the OpenGL ARB extensions. from ctypes import * import sys import pygame from pygame.locals import * try: # For OpenGL-ctypes from OpenGL import platform gl = platform.OpenGL except ImportError: try: # For PyOpenGL gl = cdll.LoadLibrary('libGL.so') except OSEr
www.komoto.org の OpenGL入門 sample09 を PyOpenGL と PIL で再現。動作させるにはこの2つのライブラリと texture2.ppm が必要。 テクスチャを作成するには PIL で画像を読み込んで、 tostring() でバイト列に直してから glTexImage2D にわたせば OK 。つまり PIL が読める画像形式ならばテクスチャとしてつかえる。オリジナルでは C言語で PPM画像をがんばって読んでいるのに対して、 PIL だと Image.open するだけ。やはり PIL は便利すぎる。 # coding: utf-8 u""" 参考 OpenGL Programing サンプル9 ミップマップ http://www.komoto.org/opengl/sample09.html これを PyOpenGL + PIL に移植してみた "
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く