Jogl-drawing-basics

提供:Dev Guides
移動先:案内検索

JOGL-描画の基本

OpenGL APIは、ポイント、頂点、ラインなどの基本的なグラフィック要素を描画するためのプリミティブメソッドを提供しています。 これらの方法を使用して、三角形、多角形、円などの形状を作成できます。 2Dおよび3Dの両方の次元。 この章では、JavaプログラムでJOGLを使用して基本的な線を描く方法を説明します。

描画オブジェクト

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

JNI

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

java JOGLの* gl.glBegin()メソッドが呼び出されると、OpenGLの glBegin()*メソッドが内部的に呼び出されます。 これが、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()*について説明します。

Sr.No. Methods and Description
1

glBegin()

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

2

glVertex3f()/glVertex2f()

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

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;

ライン