「moreover lwjgl」 9 現代的なテクスチャ表示(1) ~stbを使って~
「現代的(Modern)」というのは「OpenGL3.2以降の機能を使った」ということです。それは、OpenGL3.2以降からは固定機能を廃止して、プログラマーが自分でシェーダなどを用意しなければいけなくなったからです。*1
ということで、現代的なやり方?に必要なのが…
- VEO(頂点エレメントオブジェクト)… 頂点を、指標を使って描画する方法。VAOをより効率よくした感じ
- シェーダ … この前の通り
- サンプラーオブジェクトとテクスチャオブジェクト … テクスチャを、テクスチャ画像自体と、それを描画するときの処理に分ける
こんな感じでしょうか?
また今回、LWJGL3に乗り込んできた、STB(シンプルなファイル(画像など)読み込みライブラリー)を使って画像を読み込むことにします。自作のTextureManagerクラスよりも数百倍簡単に読み込めます。
続きを読む「moreover lejgl」8 プログラマブルシェーダ
現代的な方法でテクスチャを表示するには、「プログラマブルシェーダ」という物が必要になるので、それをやってからにします。
元々OpenGLはプログラムの内部に「シェーダ(陰影処理、グラデーションとか)」という物があって、それらはOpenGLが決めた「固定機能(マテリアル、ライトとか)」を組み合わせたりして、物を描画するようにしていました。
しかし、3DCGでもっと複雑なことをしたいというユーザーのニーズに応えるために、KHRONOS Groupが固定機能を廃止する方針にして、「プログラマブルシェーダ(プログラミングできるシェーダ)」を推奨するようになりました。
そうして、OpenGL3.2からは完全に固定機能を廃止しており、プログラマブルシェーダ以外に描画する方法がなくなりました。
続きを読む「moreover lwjgl」 7 (古風な)Texture貼り付け(2)
続きです。TextureManagerクラスしか使わないので、それだけ貼ります。
続きを読む「moreover lwjgl」 6 (古風な)Texture貼り付け(1)
OpenGL1.1(古すぎ!)でも動作するように、Texture(画像)を表示させます。
OpenGL1.1では、テクスチャの長さ(縦と横で違っても良い)は2のべき乗(Power of Two,POT)でなければいけないです。つまり、 16×8 や 256×512 px といったようにしなければいけません。
実際のテクスチャは2のべき乗とは限らないので、一番近い大きさの2のべき乗の大きさを求めて、その大きさに画像を拡大/縮小します。ここが一番苦戦します。(苦戦の理由は後で)
ということで、ソースコードから。今回は、TextureManager.java と Test4_LoadTexture.java の2つになります。2つということは、それだけ長くなっちゃうんですね。Gist表示を縦スクロールもできるようにしたいです。
続きを読む