Jogl-pre-defined-shapes

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

JOGL-事前定義された形状

前の章で、JOGLを使用して線、三角形、菱形などの図形を描画する方法を学習しました。 事前定義フィールド Gl_lines を_glBegin()_メソッドに渡すことで線を描画します。

*GL_LINES* 以外に、* glBegin()*メソッドはさらに8つのパラメーターを受け入れます。 それらを使用して、さまざまな形状を描くことができます。 これらはGL_LINESと同じ方法で使用されます。

次の表は、* glBegin()*メソッドのパラメーターとその説明を示しています-

Sr.No Parameters and Description
1

GL_LINES

頂点の各ペアを独立したラインセグメントとして作成します。

2

GL_LINE_STRIP

最初の頂点から最後までの線セグメントの接続グループを描画します。

3

GL_LINE_LOOP

最初の頂点から最後まで線セグメントの接続グループを描画し、再び最初に戻します。

4

GL_TRIANGLES

頂点の各トリプレットを独立した三角形として扱います。

5

GL_TRIANGLE_STRIP

接続された三角形のグループを描画します。 最初の2つの頂点の後に表示される各頂点に対して1つの三角形が定義されます。

6

GL_TRIANGLE_FAN

接続された三角形のグループを描画します。 最初の2つの頂点の後に表示される各頂点に対して1つの三角形が定義されます。

7

GL_QUADS

4つの頂点の各グループを独立した四辺形として扱います。

8

GL_QUAD_STRIP

接続された四角形のグループを描画します。 最初のペアの後に表示される頂点の各ペアに対して、1つの四角形が定義されます。

9

GL_POLYGON

単一の凸多角形を描画します。 頂点1、…、nはこのポリゴンを定義します。

  • glBegin()*パラメーターを使用した例をいくつか見てみましょう。

ラインストリップを描くプログラム

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 LineStrip implements GLEventListener {

   @Override
   public void display(GLAutoDrawable drawable) {

      final GL2 gl = drawable.getGL().getGL2();

      gl.glBegin (GL2.GL_LINE_STRIP);
      gl.glVertex3f(-0.50f,-0.75f, 0);
      gl.glVertex3f(0.7f,0.5f, 0);
      gl.glVertex3f(0.70f,-0.70f, 0);
      gl.glVertex3f(0f,0.5f, 0);
      gl.glEnd();
   }

   @Override
   public void dispose(GLAutoDrawable arg0) {
     //method body
   }

   @Override
   public void init(GLAutoDrawable arg0) {
     //method body
   }

   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
     //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);
      LineStrip r = new LineStrip();
      glcanvas.addGLEventListener(r);
      glcanvas.setSize(400, 400);

     //creating frame
      final JFrame frame = new JFrame ("LineStrip");

     //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;

上記のコードをコンパイルして実行すると、次の出力が生成されます-

LineStrip

ラインループを描画するdisplay()メソッドのコードスニペット

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();

   gl.glBegin (GL2.GL_LINE_LOOP);

   gl.glVertex3f( -0.50f, -0.75f, 0);
   gl.glVertex3f(0.7f, .5f, 0);
   gl.glVertex3f(0.70f, -0.70f, 0);
   gl.glVertex3f(0f, 0.5f, 0);

   gl.glEnd();
}

基本テンプレートプログラムのいずれかの* display()*メソッドを上記のコードで置き換え、コンパイルして実行すると、次の出力が生成されます-

ラインループ

GL_TRIANGLESを使用して三角形を描画するdisplay()メソッドのコードスニペット

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();

   gl.glBegin(GL2.GL_TRIANGLES);       //Drawing Using Triangles

   gl.glVertex3f(0.5f,0.7f,0.0f);      //Top
   gl.glVertex3f(-0.2f,-0.50f,0.0f);   //Bottom Left
   gl.glVertex3f(0.5f,-0.5f,0.0f);     //Bottom Right

   gl.glEnd();
}

基本テンプレートプログラムのいずれかの* display()*メソッドを上記のコードで置き換え、コンパイルして実行すると、次の出力が生成されます-

三角形

三角形ストリップを描画するdisplay()メソッドのコードスニペット

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();

   gl.glBegin (GL2.GL_TRIANGLE_STRIP);

   gl.glVertex3f(0f,0.5f,0);
   gl.glVertex3f(-0.50f,-0.75f,0);
   gl.glVertex3f(0.28f,0.06f,0);
   gl.glVertex3f(0.7f,0.5f,0);
   gl.glVertex3f(0.7f,-0.7f,0);

   gl.glEnd();
}

基本テンプレートプログラムのいずれかの* display()*メソッドを上記のコードで置き換え、コンパイルして実行すると、次の出力が生成されます-

三角形ストリップ

四角形を描画するdisplay()メソッドのコードスニペット

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();

   gl.glBegin(GL2.GL_QUADS);

   gl.glVertex3f( 0.0f,0.75f,0);
   gl.glVertex3f(-0.75f,0f,0);
   gl.glVertex3f(0f,-0.75f,0);
   gl.glVertex3f(0.75f,0f,0);

   gl.glEnd();
}

基本テンプレートプログラムのいずれかの* display()*メソッドを上記のコードで置き換え、コンパイルして実行すると、次の出力が生成されます-

Quads

ポリゴンを描画するdisplay()メソッドのコードスニペット

public void display(GLAutoDrawable drawable) {

   final GL2 gl = drawable.getGL().getGL2();

   gl.glBegin(GL2.GL_POLYGON);

   gl.glVertex3f(0f,0.5f,0f);
   gl.glVertex3f(-0.5f,0.2f,0f);
   gl.glVertex3f(-0.5f,-0.2f,0f);
   gl.glVertex3f(0f,-0.5f,0f);
   gl.glVertex3f(0f,0.5f,0f);
   gl.glVertex3f(0.5f,0.2f,0f);
   gl.glVertex3f(0.5f,-0.2f,0f);
   gl.glVertex3f(0f,-0.5f,0f);

   gl.glEnd();
}

基本テンプレートプログラムのいずれかの* display()*メソッドを上記のコードに置き換え、コンパイルして実行すると、次の出力が生成されます-

ポリゴン