3DCG

Python3で「OpenGL」を学ぶ 「ModernGL」レンダリング

VertexArray までを作成の後、結果をレンダリングしてみます。

fbo = ctx.simple_framebuffer((512, 512))
fbo.use()
fbo.clear(0.0, 0.0, 0.0, 1.0)
vao.render(moderngl.LINE_STRIP)

Image.frombytes('RGB', fbo.size, fbo.read(), 'raw', 'RGB', 0, -1).show()

参考にした記事はこちら

最終的なコード

import moderngl
import numpy as np

from PIL import Image

ctx = moderngl.create_standalone_context()

prog = ctx.program(
    vertex_shader='''
        #version 330

        in vec2 in_vert;
        in vec3 in_color;

        out vec3 v_color;

        void main() {
            v_color = in_color;
            gl_Position = vec4(in_vert, 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330

        in vec3 v_color;

        out vec3 f_color;

        void main() {
            f_color = v_color;
        }
    ''',
)

x = np.linspace(-1.0, 1.0, 50)
y = np.random.rand(50) - 0.5
r = np.ones(50)
g = np.zeros(50)
b = np.zeros(50)

vertices = np.dstack([x, y, r, g, b])

vbo = ctx.buffer(vertices.astype('f4').tobytes())
vao = ctx.simple_vertex_array(prog, vbo, 'in_vert', 'in_color')

fbo = ctx.simple_framebuffer((512, 512))
fbo.use()
fbo.clear(0.0, 0.0, 0.0, 1.0)
vao.render(moderngl.LINE_STRIP)

Image.frombytes('RGB', fbo.size, fbo.read(), 'raw', 'RGB', 0, -1).show()

実行結果

このときのyはランダム(np.random.rand(50) – 0.5)

以下のようなエラーが出る場合、’moderngl.mgl’のビルドをする。

>python guide.py
Traceback (most recent call last):
  File "guide.py", line 6, in <module>
    ctx = moderngl.create_standalone_context()
AttributeError: module 'moderngl' has no attribute 'create_standalone_context'

‘moderngl.mgl’のビルドのために、リポジトリをクローンし、setup.py を試すも、Microsoft Visual C++ 14.0 が必要。

\moderngl>python setup.py build_ext --inplace
running build_ext
building 'moderngl.mgl' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/

ひとまず、紹介されたURLから、すべてのダウンロード > Visual Studio 2019 のツール > Build Tools for Visual Studio 2019 をダウンロード。

さらに、実行して、C++ Build Toolsの項目をチェック、以下を選択してインストール。

  • MSVC v142 – VS 2019 C++ x64/x86ビルドツール
  • Windows 10 SDK
  • Windows 用 C++ CMake ツール
  • ツールのコア機能テスト – ビルド ツール
  • MSVC v140 – VS 2015 C++ ビルドツール

インストール完了後に以下のようなエラーが出る場合は更に対応が必要。

LINK : fatal error LNK1158: 'rc.exe' を実行できません。
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158

x86, x64について、C:\Program Files (x86)\Windows Kits\10\bin にある、「10.0.16299.0」「10.0.18362.0」といったフォルダがあり、その中で最も新しいフォルダの中のx86, x64のフォルダを確認し、以下のように操作する。

x86フォルダの中身 → C:\Program Files (x86)\Windows Kits\10\bin\x86 へコピー
x64フォルダの中身 →C:\Program Files (x86)\Windows Kits\10\bin\x64 へコピー

これで再度、以下を実行すると無事にインストールが完了した。

> python setup.py build_ext --inplace

(省略)
コード生成しています。
コード生成が終了しました。
copying build\lib.win-amd64-3.6\moderngl\mgl.cp36-win_amd64.pyd -> moderngl