今まで、プロコン用ゲームを作成するために、仕様の作成を行なっていましたが、ちょいと仕様作成につまづいて(調査することが多いため)ゲームで使用する(使用したい)3Dモデルの読み込みアプリを作成しようと考えています。
以前、LWJGLを使用して実装したのですが、ライセンスなどが、面倒なのとインストール(セットアップ)が面倒なのでシンプルにJOGLを使用してみようと考えています。
JOGL= OpenGL
Java版のOpenGLということらしいです。LWJGLでも同じようなメソッドとかクラスとか使用していました。
なので、LWJGLよりも使いやすいと思ったのです。
早速写経
参考サイトはこちらです。
写経したものを、実行してみます。クラス名は自分の作成したクラス名になっています。そして、オーバーライドするメソッドが増えていたので、それも追加しました。
public class ModelUtil implements GLEventListener { @Override public void display(GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glBegin (GL2.GL_LINES);//static field gl.glVertex3f(0.50f,-0.50f,0); gl.glVertex3f(-0.50f,0.50f,0); gl.glEnd(); } @Override public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) { } @Override public void dispose(GLAutoDrawable arg0) { } @Override public void init(GLAutoDrawable arg0) { } public static void main(String[] args) { final GLProfile profile = GLProfile.get(GLProfile.GL2); GLCapabilities capabilities = new GLCapabilities(profile); final GLCanvas glcanvas = new GLCanvas(capabilities); Line l = new Line(); glcanvas.addGLEventListener((GLEventListener) l); glcanvas.setSize(400, 400); final JFrame frame = new JFrame ("straight Line"); frame.getContentPane().add(glcanvas); frame.setSize(frame.getContentPane().getPreferredSize()); frame.setVisible(true); } }
描画するのに使用するのはJavaFXではなく、「Swing」のようです。
サンプルはこちらのサイトにありました。
写経してみて
動画にありますが、写経後に色々と気がつくことが多いです。
とりあえずは、今回作成したコードからして、画面に何かしらを描画するためには下のクラスを使用する必要があるということがわかりました。
- GLProfile
- GLCapabilities
- GLCanvas
- GLEventListener
コードを眺める
今回作成した「ModelUtil」クラスはGLEventListenerの実装クラスです。
このインターフェースクラスを実装(implements)すると必ず、下のメソッドをオーバーライドしなくてはいけません。
Javaはそういうルールをコンパイラで作っています。→このようにしないとビルドエラーになるということです。
- display()
- reshape()
- dispose()
- init()
ちなみにこれらのメソッドはから実装です(笑)。下のような形です。
@Override public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) { } @Override public void dispose(GLAutoDrawable arg0) { } @Override public void init(GLAutoDrawable arg0) { }
それでも、Mainメソッドで動かしているので問題なく表示できました。
とりあえず、写経して線を引いただけですが、ここからVoxcelやBlenderなどで作成した#Dモデルを表示することを目指します。
でわでわ。。。
関連ページ
- Chapter1[外枠の表示のみ]
- Chapter2-1〜クラスの構成〜
- Chapter2-2〜インターフェースの使い方と詳細〜
- Chapter2-3〜GameEngineクラス(サンプルクラス)〜/li>
- Chapter2-4〜Windowクラス(サンプルクラス)〜
- Chapter3〜描画処理を読む〜
- Chapter4〜シェーダについて〜
- Chapter5-1〜レンダリングについて〜
- Chapter5-2〜レンダリング詳細〜
- Chapter6〜Projection(投影)〜
- Chapter7-1〜Cubeを作る〜
- Chapter7-2〜Texture〜
@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
}
@Override
public void dispose(GLAutoDrawable arg0) {
}
@Override
public void init(GLAutoDrawable arg0) {
}