📜  JOGL Lightning(1)

📅  最后修改于: 2023-12-03 14:43:07.152000             🧑  作者: Mango

JOGL Lightning

JOGL Lightning是一个基于Java的OpenGL库,它可以让Java程序员直接访问OpenGL并制作跨平台的图形应用程序。这个库提供了Java绑定到OpenGL API的所有功能,同时采用了Java才有的特性,比如垃圾回收、异常处理等。此外,JOGL Lightning不需要额外的本机库支持,而是全部用Java实现。

特性
  • 完全跨平台:支持 Windows、Linux、MacOS 等操作系统。
  • 与OpenGL CMD语言的绑定:能够提供最高的反应速度和最高的灵敏度。
  • 面向对象的设计:能使开发人员快速创建并修改3D对象,并简化OpenGL的编程。
  • 稳定性、兼容性高:该库支持2D和3D图形、光照、材质、纹理、阴影等众多OpenGL的特性。同时JOGL Lightning也支持OpenGL的高版本,兼容性良好。
  • 使用方便:借助于Eclipse、NetBeans等IDE和Maven等构建工具,用户能够轻易创建自己的OpenGL应用程序。
JOGL Lightning与OpenGL的比较

| 功能 | JOGL Lightning | OpenGL | | - | - | - | | 编程语言 | Java | C语言 | | 标准库 | Yes | No | | 面向对象 | Yes | No | | 跨平台 | Yes | No | | 安全性 | 高 | 一般 | | 总体效率 | 低 | 高 |

安装

您可以从以下链接中下载JOGL Lightning。

https://jogamp.org/deployment/jogamp-current/archive/

解压缩下载的文件,得到jogl-all.jargluegen-rt.jar两个JAR文件。您可以将它们添加到您的Java项目的类路径中(例如放入lib目录下并将其添加到Eclipse/NetBeans项目的Build Path中)。

以下是在Maven项目中添加JOGL Lightning的pom.xml文件内的配置示例:

<dependency>
    <groupId>org.jogamp.jogl</groupId>
    <artifactId>jogl-all-main</artifactId>
    <version>2.4.0-rc-20210227</version>
</dependency>
<dependency>
    <groupId>org.jogamp.gluegen</groupId>
    <artifactId>gluegen-rt-main</artifactId>
    <version>2.3.3</version>
</dependency>
示例

以下是一个使用JOGL Lightning绘制一个简单的立方体的例子。

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.JFrame;

public class Main implements GLEventListener {

    public static void main(String[] args) {
        Main listener = new Main();

        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(listener);

        JFrame frame = new JFrame("JOGL Lightning Example");
        frame.getContentPane().add(canvas);

        frame.setSize(1440, 900);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public void init(GLAutoDrawable drawable) { }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }

    public void display(GLAutoDrawable drawable) {
        final GL2 gl = drawable.getGL().getGL2();

        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);

        gl.glBegin(GL2.GL_QUADS);
        gl.glColor3f(1f, 0f, 0f);    // Red
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);

        gl.glColor3f(0f, 1f, 0f);    // Green
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);

        gl.glColor3f(0f, 0f, 1f);    // Blue
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);

        gl.glColor3f(1f, 1f, 0f);    // Yellow
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);

        gl.glColor3f(1f, 0f, 1f);    // Magenta
        gl.glVertex3f(0.5f, -0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, -0.5f);
        gl.glVertex3f(0.5f, 0.5f, 0.5f);
        gl.glVertex3f(0.5f, -0.5f, 0.5f);

        gl.glColor3f(0f, 1f, 1f);    // Cyan
        gl.glVertex3f(-0.5f, -0.5f, -0.5f);
        gl.glVertex3f(-0.5f, -0.5f, 0.5f);
        gl.glVertex3f(-0.5f, 0.5f, 0.5f);
        gl.glVertex3f(-0.5f, 0.5f, -0.5f);

        gl.glEnd();
    }

    public void dispose(GLAutoDrawable drawable) { }

}

此例使用了JOGL Lightning的基本方法,初始化OpenGL绘图环境并绘制一个由六个纯色面组成的简单立方体。