JOGL - Hình dạng xác định trước

Trong các chương trước, chúng ta đã học cách vẽ một hình như đường thẳng, tam giác, hình thoi bằng JOGL. Chúng tôi vẽ các đường bằng cách chuyển một trường được xác định trước,Gl_linessang phương thức glBegin () .

Khác với GL_LINES, các glBegin()phương thức chấp nhận thêm tám tham số. Bạn có thể sử dụng chúng để vẽ các hình dạng khác nhau. Chúng được sử dụng giống như GL_LINES.

Bảng sau đây cho thấy glBegin() tham số phương thức cùng với mô tả của chúng -

Sr.No Thông số và mô tả
1

GL_LINES

Tạo mỗi cặp đỉnh như một đoạn thẳng độc lập.

2

GL_LINE_STRIP

Vẽ một nhóm các đoạn thẳng được kết nối từ đỉnh đầu tiên đến đỉnh cuối cùng.

3

GL_LINE_LOOP

Vẽ một nhóm đoạn thẳng được kết nối từ đỉnh đầu tiên đến đỉnh cuối cùng, một lần nữa trở lại đỉnh đầu tiên.

4

GL_TRIANGLES

Coi mỗi bộ ba đỉnh là một tam giác độc lập.

5

GL_TRIANGLE_STRIP

Vẽ một nhóm tam giác được kết nối. Một tam giác được xác định cho mỗi đỉnh được trình bày sau hai đỉnh đầu tiên.

6

GL_TRIANGLE_FAN

Vẽ một nhóm tam giác được kết nối. Một tam giác được xác định cho mỗi đỉnh được trình bày sau hai đỉnh đầu tiên.

7

GL_QUADS

Coi mỗi nhóm bốn đỉnh là một tứ giác độc lập.

số 8

GL_QUAD_STRIP

Vẽ một nhóm tứ giác được kết nối. Một tứ giác được xác định cho mỗi cặp đỉnh được trình bày sau cặp đầu tiên.

9

GL_POLYGON

Vẽ một đa giác lồi. Các đỉnh 1,…, n xác định đa giác này.

Hãy để chúng tôi xem một số ví dụ sử dụng glBegin() thông số.

Chương trình vẽ Dải đường thẳng

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;

Nếu bạn biên dịch và thực thi đoạn mã trên, kết quả sau sẽ được tạo:

Đoạn mã cho phương thức display () để vẽ Đường vòng

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();
}

Nếu bạn thay thế display() phương pháp của bất kỳ chương trình mẫu cơ bản nào với mã trên, biên dịch và thực thi nó, kết quả sau được tạo:

Đoạn mã cho phương thức display () để vẽ hình tam giác bằng GL_TRIANGLES

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();
}

Nếu bạn thay thế display() phương pháp của bất kỳ chương trình mẫu cơ bản nào với mã trên, biên dịch và thực thi nó, kết quả sau được tạo:

Đoạn mã cho phương thức display () để vẽ Dải tam giác

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();
}

Nếu bạn thay thế display() của bất kỳ chương trình mẫu cơ bản nào với mã trên, biên dịch và thực thi nó, kết quả sau được tạo:

Đoạn mã cho phương thức display () để vẽ một tứ giác

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();
}

Nếu bạn thay thế display() phương pháp của bất kỳ chương trình mẫu cơ bản nào với mã trên, biên dịch và thực thi nó, kết quả sau được tạo:

Đoạn mã cho phương thức display () để vẽ một đa giác

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();
}

Nếu bạn thay thế display() phương pháp của bất kỳ chương trình mẫu cơ bản nào với mã trên, biên dịch và thực thi nó, kết quả sau được tạo: