JOGL - API cho Mẫu cơ bản
Sử dụng lập trình JOGL, có thể vẽ các hình dạng đồ họa khác nhau như đường thẳng, hình tam giác, hình 3D bao gồm các hiệu ứng đặc biệt như xoay, ánh sáng, màu sắc, ... Để vẽ các đối tượng trong JOGL trước hết chúng ta phải xây dựng một khung JOGL cơ bản . Dưới đây là các lớp cần thiết để xây dựng một khung cơ bản.
Giao diện GLEventListener
Để làm cho chương trình của bạn có khả năng sử dụng API đồ họa JOGL, bạn cần triển khai GLEventListenergiao diện. Bạn có thể tìm thấyGLEventListener giao diện trong javax.media.opengl gói hàng.
Bảng sau đây cung cấp chi tiết về các phương pháp và mô tả khác nhau của GLEventListener giao diện -
Sr.No. | Phương pháp và Mô tả |
---|---|
1 | Void display(GLAutoDrawable drawable) Nó được gọi bởi đối tượng của giao diện GLAutoDrawable để bắt đầu hiển thị OpenGL bởi ứng dụng khách. tức là, phương thức này chứa logic được sử dụng để vẽ các phần tử đồ họa bằng OpenGL API. |
2 | Void dispose(GLAutoDrawable drawable) Phương pháp này báo hiệu cho người nghe thực hiện việc giải phóng tất cả tài nguyên OpenGL trên mỗi GLContext, chẳng hạn như bộ đệm bộ nhớ và chương trình GLSL. |
3 | Void init(GLAutoDrawble drawable) Nó được gọi bởi đối tượng của giao diện GLAutoDrawable ngay sau khi ngữ cảnh OpenGL được khởi tạo. |
4 | Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height) Nó được gọi bởi đối tượng của giao diện GLAutoDrawable trong lần sơn lại đầu tiên sau khi thành phần đã được thay đổi kích thước. Nó cũng được gọi bất cứ khi nào vị trí của thành phần trên cửa sổ, được thay đổi. |
Tất cả các phương pháp của GLEventListener yêu cầu đối tượng của GLAutoDrawable giao diện như một tham số.
Giao diện GLAutoDrawable
Giao diện này cung cấp cơ chế dựa trên sự kiện (GLEventListener) để thực hiện kết xuất OpenGL. GLAutoDrawable tự động tạo bối cảnh hiển thị chính được liên kết với GLAutoDrawable trong suốt thời gian tồn tại của đối tượng.
Bảng sau đây cung cấp chi tiết về các phương pháp và mô tả khác nhau của GLAutoDrawable giao diện -
Sr.No | Phương pháp và Mô tả |
---|---|
1 | GL getGL() Trả về đối tượng đường ống GL được sử dụng bởi đối tượng hiện tại của giao diện GLAutoDrawable. |
2 | void addGLEventListener(GLEventListener Listener) Thêm trình nghe đã cho vào cuối hàng đợi có thể kéo hiện tại. |
3 | void addGLEventListener(int index, GLEventListener listener) Thêm trình nghe đã cho tại chỉ mục nhất định của hàng đợi có thể kéo này. |
4 | void destroy() Destroys tất cả các tài nguyên được liên kết với đối tượng này của giao diện GLAutoDrawable, bao gồm cả GLContext. |
Note- Có các phương pháp khác trong gói này. Chỉ một số phương pháp quan trọng liên quan đến mẫu được thảo luận trong giao diện này.
Lớp GLCanvas
GLCanvas và GLJpanel là hai lớp chính của JOGL GUI triển khai GLAutoDrawable giao diện, có thể được sử dụng làm bề mặt vẽ cho các lệnh OpenGL.
GLCanvas là một thành phần AWT hạng nặng cung cấp hỗ trợ kết xuất OpenGL. Đây là cách triển khai chính của mộtAWTAutoGLDrawablegiao diện. Nó cũng kế thừajava.awt.Canvaslớp học. Vì nó là một thành phần nặng, trong một số trường hợp,GLJCanvascó thể không tích hợp chính xác với thành phần swing. Vì vậy, cần phải cẩn thận trong khi sử dụng nó với Swing. Bất cứ khi nào bạn gặp vấn đề vớiGLJCanvas, sau đó bạn phải sử dụng GLJPanel lớp học.
Sơ đồ phân cấp của lớp GLCanvas có thể như hình dưới đây -
GLEventistener giao diện hoạt động cùng với GLCanvaslớp học. Nó phản hồi những thay đổi trongGLCanvas lớp và các yêu cầu vẽ của họ.
Bất cứ khi nào GLCanvas lớp được khởi tạo, init() phương pháp của GLEventListenerĐược gọi. Bạn có thể ghi đè phương thức này để khởi tạo trạng thái OpenGL.
Bất cứ khi nào GLCanvas được vẽ ban đầu (khởi tạo) hoặc thay đổi kích thước, reshape() phương pháp của GLEventListenerđược thực thi. Nó được sử dụng để khởi tạo khung nhìn OpenGL và ma trận chiếu. Nó cũng được gọi bất cứ khi nào vị trí của thành phần bị thay đổi.
Phương thức display () của GLEventListenerchứa mã để hiển thị cảnh 3D. Nó được gọi bất cứ khi nào phương thức display () củaGLCanvas Được gọi.
Dưới đây là các hàm tạo cần thiết để khởi tạo lớp GLCanvas.
Sr.No | Hàm tạo và mô tả |
---|---|
1 | GLCanvas() Nó tạo ra một thành phần GLCanvas mới với một bộ khả năng OpenGL mặc định, sử dụng cơ chế lựa chọn khả năng OpenGL mặc định, trên thiết bị màn hình mặc định. |
2 | GLCanvas(GLCapabilitiesImmutable) Nó tạo ra một thành phần GLCanvas mới với tập hợp các khả năng OpenGL được yêu cầu bằng cách sử dụng cơ chế lựa chọn các khả năng OpenGL mặc định trên thiết bị màn hình mặc định. |
Dưới đây là các phương thức được sử dụng để xử lý sự kiện của lớp GLCanvas.
Sr không. | Phương pháp và Mô tả |
---|---|
1 | void addGLEventListener(GLEventListener listener) Thêm trình nghe đã cho vào cuối hàng đợi có thể kéo này. |
2 | void addGLEventListener(int indexGLEventListener listener) Thêm trình nghe đã cho tại chỉ mục nhất định của hàng đợi có thể kéo này. |
Để khởi tạo GLCanvas lớp học, bạn cần đối tượng của GLCapabilitiesImmutable giao diện, chỉ định một tập hợp các khả năng OpenGL bất biến.
Một trong những cách để có được một đối tượng CapabilitiesImmutable giao diện là để khởi tạo GLCapabilitieslớp, thực hiện giao diện. Một ví dụ củaGLCapabilities lớp có thể được sử dụng để phục vụ mục đích.
Lớp GLCapabilities
Lớp này chỉ định một tập hợp các khả năng OpenGL. Nó nhận đối tượng GLCapabilities làm tham số. CácGLCapabilities lớp mô tả các khả năng mong muốn mà ngữ cảnh kết xuất phải hỗ trợ, chẳng hạn như cấu hình OpenGL.
Dưới đây là một hàm tạo để khởi tạo lớp GLCapabilities
Sr không. | Phương pháp và Mô tả |
---|---|
1 | GLCapabilities(GLProfile glprofile) Nó tạo ra một đối tượng GLCapabilities. |
Để khởi tạo GLCanvas , bạn cần một đối tượng của giao diện GLCapabilitiesImmutable, chỉ định một tập hợp các khả năng OpenGL bất biến.
Một trong những cách để có được một đối tượng CapabilitiesImmutable giao diện là để khởi tạo GLCapabilitieslớp, thực hiện giao diện. Ví dụ củaGLCapabilities lớp có thể được sử dụng để phục vụ mục đích.
Các GLCapabilities đến lượt lớp yêu cầu một GLProfile vật.
Lớp GLProfile
Vì một số phiên bản của API OpenGL đã được phát hành; bạn cần chỉ định phiên bản chính xác của API OpenGL đang được sử dụng trong chương trình của bạn cho Máy ảo Java (JVM). Điều này được thực hiện bằng cách sử dụngGLProfile lớp học.
Các get() phương thức của lớp này chấp nhận các phương thức khác nhau được xác định trước Stringcác đối tượng dưới dạng tham số. Mỗi đối tượng String là tên của một giao diện và mỗi giao diện hỗ trợ các phiên bản OpenGL nhất định. Nếu bạn khởi tạo lớp này dưới dạng static và singleton, nó sẽ cung cấp cho bạn singletonGLProfile các đối tượng cho mỗi hồ sơ JOGL có sẵn.
Dưới đây là nguyên mẫu của phương thức get của lớp GLProfile.
Sr.No. | Phương pháp và Mô tả |
---|---|
1 | Static GLProfile get(String profile) Sử dụng thiết bị mặc định. |
Vì đây là một phương thức tĩnh, bạn cần gọi nó bằng cách sử dụng tên lớp và nó yêu cầu một biến chuỗi tĩnh được xác định trước làm tham số. Có 12 biến như vậy trong lớp này, mỗi biến đại diện cho một triển khai riêng của giao diện GL.
GLProfile.get(GLProfile.GL2);
Các tham số của phương thức get ()
Sr.No | Giá trị chuỗi được xác định trước (Tên giao diện) và Mô tả |
---|---|
1 | GL2 Giao diện này chứa tất cả các phương thức OpenGL [1.0… 3.0] cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
2 | GLES1 Giao diện này chứa tất cả các phương thức OpenGL ES [1.0 ... 1.1] cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
3 | GLES2 Giao diện này chứa tất cả các phương thức OpenGL ES 2.0 cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
4 | GLES3 Giao diện này chứa tất cả các phương thức OpenGL ES 3.0 cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
5 | GL2ES1 Giao diện này chứa tập con chung của GL2 và GLES1. |
6 | GL2ES2 Giao diện này chứa tập con chung của GL3, GL2 và GLES2. |
7 | GL2GL3 Giao diện này chứa tập con chung của lõi GL3 (OpenGL 3.1+) và GL2. |
số 8 | GL3 Giao diện này chứa tất cả các phương thức cốt lõi của OpenGL [3.1 ... 3.3] cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
9 | GL3bc Giao diện này chứa tất cả các phương thức tương thích của OpenGL [3.1 ... 3.3] , cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
10 | GL3ES3 Giao diện này chứa tập con chung của lõi GL3 (OpenGL 3.1+) và GLES3 (OpenGL ES 3.0). |
11 | GL4 Giao diện này chứa tất cả các phương thức cốt lõi của OpenGL [4.0 ... 4.3] , cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm đặc tả này. |
12 | GL4bc Giao diện này chứa tất cả cấu hình tương thích của OpenGL [4.0 ... 4.3] , cũng như hầu hết các phần mở rộng của nó được xác định tại thời điểm của đặc tả này. |
13 | GL4ES3 Giao diện chứa tập con chung của lõi GL4 (OpenGL 4.0+) và GLES3 (OpenGL ES 3.0). |
Lớp GLJPanel
Nó là một thành phần Swing nhẹ cung cấp hỗ trợ kết xuất OpenGL. Nó được cung cấp để tương thích với Swing.
Cấu trúc phân cấp lớp GLJPanel
Dưới đây là sơ đồ đại diện cho phân cấp lớp của lớp GLJPanel.
Dưới đây là các hàm tạo khác nhau của lớp GLJPanel.
Sr không. | Trình tạo và mô tả |
---|---|
1 | GJPanel() Nó tạo ra một thành phần GLJPanel mới với một tập hợp các khả năng OpenGL mặc định. |
2 | (GLCapabilitiesImmutable) Nó tạo ra một thành phần GLJPanel mới với tập hợp các khả năng OpenGL được yêu cầu. |
3 | GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser) Nó tạo ra một thành phần GLJPanel mới. |
Dưới đây là các phương thức của lớp GLJPanel.
Sr.No. | Phương pháp và Mô tả |
---|---|
1 | void addGLEventListener(GLEventListener listener) Phương thức này thêm trình nghe đã cho vào cuối hàng đợi có thể kéo này. |
2 | void addGLEventListener(int indexGLEventListener listener) Phương thức này thêm trình nghe đã cho tại chỉ mục nhất định của hàng đợi có thể kéo này. |