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: