JOGL-描画の基本

OpenGL APIは、点、頂点、線などの基本的なグラフィカル要素を描画するためのプリミティブメソッドを提供しています。これらのメソッドを使用して、三角形、多角形、円などの形状を開発できます。2Dと3Dの両方の次元で。この章では、JavaプログラムでJOGLを使用して基本的な線を引く方法について説明します。

オブジェクトの描画

ハードウェアおよびオペレーティングシステムプラットフォームに固有であり、ライブラリがCやC ++(ネイティブアプリケーション)などの他の言語で記述されているプログラムにアクセスするために、Javaは次のようなプログラミングフレームワークを使用します。 Java Native Interface (JNI)。次の図に示すように、JOGLはこのインターフェイスを内部的に使用してOpenGL関数にアクセスします。

の4つの方法すべて GLEventListenerインターフェイスには、OpenGL関数を内部的に呼び出すためのコード(Java JOGLメソッド)があります。これらのJOGLメソッドの命名も、OpenGLの命名規則に似ています。OpenGLの関数名がglBegin()、として使用されます gl.glBegin()

いつでも gl.glBegin() java JOGLのメソッドが呼び出され、内部で glBegin()OpenGLのメソッド。これが、JOGLのインストール時にユーザーシステムにネイティブライブラリファイルをインストールする理由です。

Display()メソッド

これは、グラフィックを開発するためのコードを保持する重要な方法です。それは必要ですGLAutoDrawable パラメータとしてのインターフェイスオブジェクト。

ザ・ display()メソッドは、最初にGLインターフェイスのオブジェクトを使用してOpenGLコンテキストを取得します(GLは、すべてのOpenGLコンテキストオブジェクトを生成するメソッドを含むGLBaseインターフェイスを継承します)。このチュートリアルはJOGL2に関するものなので、GL2オブジェクトを生成しましょう。

次のコードスニペットは、GL2オブジェクトを生成する方法を示しています-

//Generating GL object
GL gl = drawable.getGL();
GL gl = drawable.getGL();

//Using this Getting the Gl2 Object
//this can be written in a single line like
final GL2 gl = drawable.getGL().getGL2();

GL2インターフェイスのオブジェクトを使用して、このインターフェイスのメンバーにアクセスできます。これにより、OpenGL [1.0 ... 3.0]関数へのアクセスが提供されます。

線を引く

GL2インターフェースにはメソッドの膨大なリストが含まれていますが、ここでは3つの主要なメソッドについて説明します。 glBegin()glVertex()、および glEnd()

シニア番号 メソッドと説明
1

glBegin()

このメソッドは、線を引くプロセスを開始します。事前定義された文字列整数「GL_LINES」をパラメータとして受け取ります。これはGLインターフェイスから継承されます。

2

glVertex3f()/glVertex2f()

このメソッドは頂点を作成し、座標をパラメーター3fおよび2fとして渡す必要があります。これらは、それぞれ3次元浮動小数点座標と2次元浮動小数点座標を示します。

3

glEnd()

行を終了します

以下は、JOGLを使用して基本的な線を引くプログラムです。

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;

import javax.swing.JFrame;

public class Line 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 dispose(GLAutoDrawable arg0) {
      //method body
   }
            
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
	
   public static void main(String[] args) {

      //getting the capabilities object of GL2 profile        
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
   
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Line l = new Line();
      glcanvas.addGLEventListener(l);
      glcanvas.setSize(400, 400);
   
      //creating frame
      final JFrame frame = new JFrame ("straight Line");
   
      //adding canvas to frame
      frame.getContentPane().add(glcanvas);
                 
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;