現在コンピュータグラフィックスプログラミング向けの、様々なライブラリ・APIが世に出回っています。今回は著名な言語で提供されているグラフィックライブラリの一部を、おすすめの利用方法などを踏まえてまとめていきたい思います。
C++
LLGL(Low Level Graphics Library)
Github:https://github.com/LukasBanana/LLGL
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#llgl-low-level-graphics-library
幅広い範囲のAPIに対応。もれなくシェーダーも利用でき、最も網羅的に使えます。その代わり知識と利用難易度は高いです。
The Forge
Github:https://github.com/ConfettiFX/The-Forge
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#the-forge
ゲームエンジン向けに作られたグラフィックスフレームワークです。OpenGLには対応していないので注意が必要です。
Diligent Engine
Github:https://github.com/DiligentGraphics/DiligentEngine
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#diligent-engine
低依存・短時間ビルド・軽量で、APIとシェーダも各プラットフォームで共通です。プラットフォーム別に覚えることがほぼない。Metal環境では利用できません。
bgfx
Github:https://github.com/DiligentGraphics/DiligentEngine
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#bgfx
各プラットフォームでの互換性が高い。その影響でシェーダやテッセレーション等の一部機能に制約がある。
oryol / sokol_gfx
Github:
https://github.com/floooh/oryol
https://github.com/floooh/sokol
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#oryol–sokol_gfx
作者が同一でoryolがC言語向けのシングルヘッドライブラリ、sokol_gfxがC++向けの軽量ライブラリ という違いがあります。C++11未満でも使えるようになっており、組み込み用途での利用を想定されています。とても軽量でありながら大方の機能は備わっています。WebGLにも対応しておりウェブ向けにコンパイルすることもできます。
Methane Kit
Github:https://github.com/egorodet/MethaneKit
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#methane-kit
比較的最近のライブラリで、デスクトップでの利用に特化している。WindowsとMac間での互換性が高いです。
bs::framework
Github:https://github.com/GameFoundry/bsf
参考サイト:https://qiita.com/funatsufumiya/items/98ca9aca0c9f8b608ca1#bsframework
ほぼゲームエンジンといえる代物で規模が他に比べ大きいです。コンピュータグラフィックス以外にも音声再生やファイル読み込みもできる多機能フレームワークです。
C#
SlimDX
Github:https://github.com/SlimDX/slimdx
参考サイト:https://ja.wikipedia.org/wiki/SlimDX
.Net framework下でDirectXプログラミングができるようにしたオープンソースAPIです。高性能なグラフィック表示が可能で、マルチメディアやゲームなどの開発に利用される。
OpenTK
Github:https://github.com/opentk/opentk
参考サイト:https://en.wikipedia.org/wiki/OpenTK
Open Toolkit libraryとも言いOpenGL系の機能が利用できます。ゲーム制作・科学研究・アプリ開発まで幅広く利用ができるように設計されています。OpenTK 4が最新のバージョンで、現在進行形でOpenTK 5が開発されています。
Java
Java 3DJava 2DJava 2D
参考サイト:
https://ja.wikipedia.org/wiki/Java_2D
https://ja.wikipedia.org/wiki/Java_3D
Java用のレンダリングAPIです。2D向けと3D向けの二つがあります。API内ではOpenGLやDirectXが描画処理を担っています。Javaでコンピュータグラフィックスを扱うのなら
Javascript
Three.js( WebGL )
Github:https://github.com/mrdoob/three.js/
参考サイト:https://ja.wikipedia.org/wiki/Three.js
気軽にWebGLの機能を利用できるようにした Javascript ライブラリです。リアルタイムレンダリングが軽量で行えます。親元のWebGLがウェブ標準に統合されているので、基本的にどのブラウザでも利用することができる。
GraphicsJS
ライブラリリンク:https://cdn.anychart.com/js/latest/graphics.min.js
参考サイト:http://www.graphicsjs.org/?lang=ja
広く使われているものの中で比較的新しいライブラリ。ウェブ標準ではないものの幅広いブラウザに対応しており、レガシー級のIE6などでも利用ができます。
Canvas API
Github:https://github.com/KTH/canvas-api
参考サイト:https://developer.mozilla.org/ja/docs/Web/API/Canvas_API
WebGLに似ているがこちらは2D に特化しています。基本的にはこちらを2D用、WebGLを3D用に使い分けることが多いです。
Ruby
Ruby/SDL
Github:https://github.com/ohai/rubysdl
参考サイト:
https://www.kmc.gr.jp/~ohai/rubysdl.html
https://ja.wikipedia.org/wiki/WebGL
SDLというC言語マルチメディアライブラリがあり、それをRuby上で利用できるようにしたライブラリです。Rubyでゲーム制作をしたいときに利用されます。しかし、Ruby自体がCに比べて遅いため高速に動作する必要があるものには不向き(3Dゲーム等)
というよりもRuby自体コンピュータグラフィックスにはあまり向いていないかも…
Python
Kivy
Github:https://github.com/kivy/kivy
参考サイト:https://ja.wikipedia.org/wiki/Kivy
コンピュータグラフィックスだけではなく、マルチタスクイベントや入力処理などのアプリケーション開発に用いる機能が網羅されたライブラリです。
PyQtGraph
Girhub:https://github.com/pyqtgraph/pyqtgraph
参考サイト:https://qiita.com/bear_montblanc/items/b39165e79d930b9f0fd1
単体でも動作する3Dグラフィック描画ライブラリです。PyQtで作られたGUIであれば簡単にその中に3Dモデルを表示させることができます。
まとめ
現在コンピュータグラフィックスという分野はプログラミング技術の中でとてもポピュラーなものになりました。流行の言語では必ずと言っていいほどこれらに対応した仕組みやライブラリがあります。プログラミングにも少し慣れてきた人や、これからプログラミングを学んでいきたいという人でも、コンピュータグラフィックスは十数年前に比べればはるかに扱いやすくなっているので、良かったら勉強してみてください。その際に今回の記事がライブラリ探しの助けになったらうれしいです。