PythonでのOpenGLを使った描画方法とは?OpenGLで描画してみよう!
- システム
エンジニア - なるほど。MeCabをPythonで使えるなら、私もやってみます。
- プロジェクト
マネージャー - ご紹介した方法でPythonにMeCabをインストールして使ってみてください。
[Python]OpenGLで描画してみよう!
今回は、PythonでOpenGLを使った描画について説明します。OpenGL(Open Graphics Library)グラフィックスのライブラリです。ここでは、簡単に開発できるように、GLFWを使用した描画について紹介します。
Windows10でPython 3.7を使って開発します。また、ライブラリは以下をインポートしておいてください。
1
2
|
PyOpenGL 3.1.5
glfw 2.0.0
|
興味のある方はぜひご覧ください。
OpenGLバージョン情報
対応するOpenGLバージョンを取得する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# OpenGLとGLFWをimport
from OpenGL.GL import *
import glfw
def main():
# GLFWの初期化
if not glfw.init():
raise RuntimeError('Failed to initialize GLFW')
# ウィンドウを作成
window = glfw.create_window(320, 240, 'OpenGL sample', None, None)
if not window:
glfw.terminate()
raise RuntimeError('Failed to create window')
# コンテキストを作成
glfw.make_context_current(window)
# バージョン情報の表示
print('Vendor :', glGetString(GL_VENDOR))
print('GPU :', glGetString(GL_RENDERER))
print('OpenGL version :', glGetString(GL_VERSION))
# ウィンドウを破棄
glfw.destroy_window(window)
# GLFWを終了
glfw.terminate()
# メイン関数
if __name__ == "__main__":
main()
|
実行すると、ターミナルに以下のようなバージョン情報が表示されます。※実行環境によって異なります。
1
2
3
|
Vendor : b'ATI Technologies Inc.'
GPU : b'AMD Radeon(TM) R2 Graphics'
OpenGL version : b'4.5.13476 Compatibility Profile Context 22.19.176.512'
|
ウィンドウの表示
ウィンドウを表示するだけの単純なプログラムを作成してみます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# OpenGLとGLFWをimport
from OpenGL.GL import *
import glfw
def main():
# GLFWの初期化
if not glfw.init():
raise RuntimeError('Failed to initialize GLFW')
# ウィンドウを作成
window = glfw.create_window(320, 240, 'OpenGL sample', None, None)
if not window:
glfw.terminate()
raise RuntimeError('Failed to create window')
# コンテキストを作成
glfw.make_context_current(window)
# ユーザがウィンドウを閉じるまでループ
while not glfw.window_should_close(window):
# ダブルバッファのスワップ
glfw.swap_buffers(window)
# イベントの受け付け
glfw.poll_events()
# ウィンドウを破棄
glfw.destroy_window(window)
# GLFWを終了
glfw.terminate()
# メイン関数
if __name__ == "__main__":
main()
|
実行すると、ウィンドウが表示されることが分かります。×ボタンで終了してください。
線を描く
先ほどのウィンドウに線を描いてみます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# OpenGLとGLFWをimport
from OpenGL.GL import *
import glfw
def main():
# GLFWの初期化
if not glfw.init():
raise RuntimeError('Failed to initialize GLFW')
# ウィンドウを作成
window = glfw.create_window(320, 240, 'OpenGL sample', None, None)
if not window:
glfw.terminate()
raise RuntimeError('Failed to create window')
# コンテキストを作成
glfw.make_context_current(window)
# ユーザがウィンドウを閉じるまでループ
while not glfw.window_should_close(window):
# 線の色指定(赤)
glColor3f(1.0, 0.0, 0.0)
# 線をつなぐ
glBegin(GL_LINE_LOOP)
glVertex2d(-0.9, -0.9)
glVertex2d(0.9, -0.9)
glVertex2d(0.9, 0.9)
glVertex2d(-0.9, 0.9)
glEnd()
# ダブルバッファのスワップ
glfw.swap_buffers(window)
# イベントの受け付け
glfw.poll_events()
# ウィンドウを破棄
glfw.destroy_window(window)
# GLFWを終了
glfw.terminate()
# メイン関数
if __name__ == "__main__":
main()
|
glVertex2dで座標を線でつなぎます。実行すると、ウィンドウに赤い線が表示されることが分かります。
塗りつぶす
先ほどのウィンドウに線を描いて、中を塗りつぶしてみます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# OpenGLとGLFWをimport
from OpenGL.GL import *
import glfw
def main():
# GLFWの初期化
if not glfw.init():
raise RuntimeError('Failed to initialize GLFW')
# ウィンドウを作成
window = glfw.create_window(320, 240, 'OpenGL sample', None, None)
if not window:
glfw.terminate()
raise RuntimeError('Failed to create window')
# コンテキストを作成
glfw.make_context_current(window)
# ユーザがウィンドウを閉じるまでループ
while not glfw.window_should_close(window):
# 線の色指定(赤)
glColor3f(1.0, 0.0, 0.0)
# 中を塗りつぶす
glBegin(GL_POLYGON)
glVertex2d(-0.9, -0.9)
glVertex2d(0.9, -0.9)
glVertex2d(0.9, 0.9)
glVertex2d(-0.9, 0.9)
glEnd()
# ダブルバッファのスワップ
glfw.swap_buffers(window)
# イベントの受け付け
glfw.poll_events()
# ウィンドウを破棄
glfw.destroy_window(window)
# GLFWを終了
glfw.terminate()
# メイン関数
if __name__ == "__main__":
main()
|
glBeginにGL_POLYGONを指定することで、中を塗りつぶすことが分かります。
- システム
エンジニア - なるほど。PythonでOpenGLを使った描画の方法がよく分かりました。
- プロジェクト
マネージャー - ぜひ、ソースコードを参考にして、ご自身で書いてみてください。
まとめ
いかがでしたでしょうか。PythonでOpenGLを使った描画について説明しました。GLFWを使った、ウィンドウの表示・線を引く・中を塗りつぶす方法について紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)