石丸です。
LWJGL第1話 – ポリゴンを回転させるでは昔ながらの固定機能パイプラインを使用しましたが、この機能はOpenGL 3.xで廃止予定の非推奨機能になっています。

今回はLightweight Java Game Library 3 TutorialRendering with Shadersで学んだ、プログラマブルシェーダーを使用した今風の書き方でポリゴンを回転させてみました。

今回の成果物
https://github.com/dcom-ishimaru/lwjgl-samples/tree/master/hello-shader

OpenGLのバージョン

OpenGLのバージョンは3.3にしました。
Macで対応しているOpenGLのバージョンが3.3 or 4.1で、少しでも多くの環境で動けばと思い3.3を選びました。

各MacがサポートするOpenGLのバージョン一覧
OpenGL および OpenCL グラフィックスを扱う Mac コンピュータ – Apple サポート
https://support.apple.com/ja-jp/HT202823

シェーダー

頂点シェーダ、フラグメントシェーダーともにチュートリアルのままです。
プログラムから渡された頂点情報(座標、色)をそのまま出力するシェーダーです。
GLSLのバージョンだけ3.3にしました。

頂点シェーダー hello.vert

フラグメントシェーダー hello.frag

シェーダーはresourcesフォルダに置いてプロジェクト構成は次のようになります。

プログラム Main.java

長くてごめんなさい。
1ソースで完結させたかったんです。

Main.Javaで描画に使用するシェーダーをセットして、ポリゴンを描画すると、頂点シェーダーで頂点、フラグメントシェーダでピクセルの色を決定して1フレームが描画されます。
固定機能パイプラインのコードに比べると、やることが多いので長いですね。

撮影が面倒で第1回の使いまわしですが、実行すると次のようにポリゴンが回ります。

参考サイト

プログラマブルシェーダを使用したOpenGLプログラム、行列クラスの実装にあたって以下のサイトを参考にさせていただきました。

Rendering · SilverTiger/lwjgl3-tutorial Wiki · GitHub
https://github.com/SilverTiger/lwjgl3-tutorial/wiki/Rendering

床井研究室 – 第5回 座標変換
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20090829

Math Functions (Direct3D 9 Graphics) – Win32 apps | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/win32/direct3d9/dx9-graphics-reference-d3dx-functions-math

TOP
TOP