JOGL2.3在Eclipse里面的配置

JOGL2.3在Eclipse里面的配置

原创 2016年07月27日 16:21:32

使用OpenGL时,大多都是使用C/C++来编程。我之前一直是使用Visual Studio 2013写OpenGL程序,OpenGL配置很方便,使用CMAKE生成相关库的解决方案,再VS编译之,.dll动态库就自己生成了,而且完美适配你自己的电脑硬件,一般不会出错。最后,把.h和.dll文件拷到相应的文件夹下面即可。当然,这不是本篇文章的重点,本文主要是介绍OpenGL使用Java平台来编程时的配置问题。

JOGL就是绑定到Java的OpenGL API。既然要用到JOGL,当然就涉及到一个配置问题。和大家一样,我在国内网站百度,发现相关的配置教程写得模模糊糊的,而且大多内容上一致,根本没一点帮助。我干脆就自己去谷歌了下,最后配置好了,下面把方法分享给大家。

JOGL有 两种配置形式:一种使用JAR包(jar文件夹下),另外一种使用.dll动态库(lib文件夹下),国内很多配置教程把这两个方法混在了一起。我感觉jar包的方式更方便,所以本文直接使用JAR包来配置。贴出谷歌的原文截图:

这里写图片描述

这里写图片描述


user library的方法:

第一步:前往http://jogamp.org下载JOGL。
这里写图片描述

如上图,点击上面的zip,进入到下载页面http://jogamp.org/deployment/jogamp-current/archive,然后下载jogamp-all-platforms.7z这个文件就可以了:
这里写图片描述

第二步:解压文件jogamp-all-platforms.7z,再将解压好的文件夹拷贝到你的Eclipse的工作区间文件夹(WorkPlace)下面,此时打开Eclipse,直接点Windows → preferences → Java → Build Path → User Libraries:

这里写图片描述

点击New…按钮,输入JOGL(库名称,方便以后辨识我用了JOGL):

这里写图片描述

这里写图片描述

点击Add External JARs…按钮,进到刚才放到工作区间(WorkPlace)下面的jogamp-all-platforms文件夹下面的jar文件夹下面,点选”gluegen-rt.jar” “jogl-all.jar”两个文件即可:

这里写图片描述

这里写图片描述

然后展开JOGL,分别点击Edit…按钮编辑Javadoc location项,输入http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/,然后保存。

这里写图片描述

这里写图片描述

这里写图片描述

同样还是展开JOGL,分别点击Edit…按钮编辑Source attachment项,点选Extenal location项,文件还是在工作区间的jogamp-all-platforms文件夹下面,分别是gluegen-java-src.zip、jogl-java-src.zip:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

上面步骤全部完成之后要记得点击OK保存。
第三步:新建一个Java项目来验证JOGL是否配置好,引入刚才的那个用户库的方法,右击项目名 → Build Path → Add Library… → User Library → Next > → 勾选刚才创建的那个JOGL用户库,点击OK:
这里写图片描述

这里写图片描述


直接为单个工程导入jar包的方法:

第一步:项目文件上右键New → Folder → 输入文件夹的名称(一般命名为lib,用来存放第三方jar包):

这里写图片描述

这里写图片描述

这里写图片描述

第二步:解压文件jogamp-all-platforms.7,将其中的四个jar包拷贝至刚才的lib文件夹下面,拷贝好之后选中这四个jar包,直接点右键 → Build Path → Add to Build Path:

这里写图片描述

这里写图片描述

这里写图片描述

第三步:确认下此时项目文件夹下面是否有如下图的Reference Libraries,如果有,说明配置成功:

这里写图片描述


上面配置好了,就可以开始测试了。附上测试代码OpenGL.java:

package lighting;

import javax.swing.JFrame;

import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.FPSAnimator;

public class LightingPolygon implements GLEventListener {
    private float angle = 0.0f;

    @Override
    public void display(GLAutoDrawable drawable) {
        // 绘制代码
        final GL2 gl = drawable.getGL().getGL2();


        gl.glColor3f(0.2f, 0.9f, 0.1f);

        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();
        gl.glRotated(angle, 0.0f, 1.0f, 0.0f);

        // 光照
        gl.glEnable(GL2.GL_LIGHTING);
        gl.glEnable(GL2.GL_LIGHT0);
        gl.glEnable(GL2.GL_NORMALIZE);//为了在使用缩放的情况下仍然保证法向量为单位长度

        // 设置光源
        float[] ambientLight = { 1.0f, 1.0f, 1.0f, 0.0f };//环境光一般这么设置
        float[] diffuseLight = { 1.0f, 1.0f, 1.0f, 0.0f};//漫反射光一般设置成和环境光一致
        float[] specularLight={0.1f, 0.2f, 0.6f, 0.0f};
        float[] positionLight = { -0.9f, 0.9f, 0.9f, 1.0f };
        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0);
        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0);
        gl.glLightfv(GL2.GL_LIGHT0,GL2.GL_SPECULAR, specularLight,0);
        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, positionLight, 0);

        // 设置光照模型
        float[] ambientModel = { 0.4f, 0.4f, 0.4f, 1.0f };
        float[] viewLmodel = { 0.0f, 0.0f, 0.0f, 1.0f };
        gl.glLightModelfv(GL2.GL_LIGHT_MODEL_AMBIENT, ambientModel, 0);
        gl.glLightModelfv(GL2.GL_LIGHT_MODEL_LOCAL_VIEWER, viewLmodel, 0);

        //设置物体材质
//      float[] ambientMat={1.0f,1.0f,1.0f,0.0f};
//      float[] diffuseMat={1.0f,1.0f,1.0f,0.0f};
//      float[] specularMat={1.0f,1.0f,1.0f,1.0f};
//      float[] emissionMat={0.3f,0.2f,0.2f,0.0f};
//      float shininess=100.0f;//镜面反射系数
//        gl.glMaterialfv(GL2.GL_FRONT,GL2.GL_AMBIENT,ambientMat,0);
//        gl.glMaterialfv(GL2.GL_FRONT,GL2.GL_DIFFUSE,diffuseMat,0);
//        gl.glMaterialfv(GL2.GL_FRONT,GL2.GL_SPECULAR,specularMat,0);
//        gl.glMaterialfv(GL2.GL_FRONT,GL2.GL_EMISSION,emissionMat,0);
//        gl.glMaterialf(GL2.GL_FRONT,GL2.GL_SHININESS,shininess);

        gl.glBegin(GL2.GL_POLYGON);
        gl.glNormal3f(0.0f,0.0f, 1.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.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();
        gl.glFlush();
        angle += 3.0f;

    }

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

    @Override
    public void init(GLAutoDrawable drawable) {
        // 设置背景颜色
        GL2 gl = drawable.getGL().getGL2();
        gl.glClearColor(0.392f, 0.584f, 0.929f, 1.0f);
    }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 获取GL2的所有特性
        final GLProfile proifile = GLProfile.get(GLProfile.GL2);
        GLCapabilities capabilities = new GLCapabilities(proifile);

        // 画布
        final GLCanvas glCanvas = new GLCanvas(capabilities);
        LightingPolygon lightingPolygon = new LightingPolygon();
        glCanvas.addGLEventListener(lightingPolygon);
        glCanvas.setSize(600, 600);

        // 创建JFrame
        final JFrame frame = new JFrame("带光照效果的旋转多边形");

        frame.getContentPane().add(glCanvas);
        frame.setSize(frame.getContentPane().getPreferredSize());
        frame.setVisible(true);

        // 设置动画
        final FPSAnimator animator = new FPSAnimator(glCanvas, 300, true);
        animator.start();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119

运行出来的效果图:

这里写图片描述

验证通过时,窗口为淡蓝色背景,中间有一个旋转的六边形。

猜你喜欢

转载自blog.csdn.net/qq_34514415/article/details/79537329