Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using OpenGL in Matlab with Java?

In Matlab I have

import javax.media.opengl.GL;

How do I now use OpenGL? Can anyone provide a very small sample?

Please note: If this wasnt in Matlab then it would be easy. But the question specifically relates to using this in Matlab.

like image 964
twerdster Avatar asked Sep 26 '11 14:09

twerdster


People also ask

Does MATLAB use OpenGL?

If you try to use hardware-accelerated graphics when it is not supported, MATLAB returns a warning message and uses software OpenGL instead.

Can you use Java in MATLAB?

You can access existing Java classes to use in the MATLAB workspace. For example, use built-in class packages, such as java. util , which are included in the Java language.

Is Java needed for MATLAB?

You must have MATLAB Compiler SDK installed. Your Java environment must be properly configured. For details, see Configure Your Environment for Generating Java Packages. Your end users must have MATLAB or MATLAB Runtime installed to run compiled MATLAB code.


1 Answers

MATLAB comes with the JOGL 1.x libraries available on its static classpath, so it's a matter of compiling your source code (with those JAR files on the classpath), then running the program inside MATLAB.

Below is a "hello world" OpenGL example in Java. I show how to compile and run it directly from inside MATLAB:

HelloWorld.java

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;

public class HelloWorld implements GLEventListener {

    public static void main(String[] args) {
        Frame frame = new Frame("JOGL HelloWorld");
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new HelloWorld());
        frame.add(canvas);
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
        gl.glColor3f(1.0f, 1.0f, 1.0f);
        gl.glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

        gl.glBegin(GL.GL_POLYGON);
        gl.glVertex2f(-0.5f, -0.5f);
        gl.glVertex2f(-0.5f, 0.5f);
        gl.glVertex2f(0.5f, 0.5f);
        gl.glVertex2f(0.5f, -0.5f);
        gl.glEnd();

        gl.glFlush();
    }

    public void init(GLAutoDrawable drawable) {
    }
    public void reshape(GLAutoDrawable drawable, 
        int x, int y, int width, int height) {
    }
    public void displayChanged(GLAutoDrawable drawable, 
        boolean modeChanged, boolean deviceChanged) {
    }
}

HelloWorld_compile_run.m

%# compile the Java code
jPath = fullfile(matlabroot,'java','jarext',computer('arch'));
cp = [fullfile(jPath,'jogl.jar') pathsep fullfile(jPath,'gluegen-rt.jar')];
cmd = ['javac -cp "' cp '" HelloWorld.java'];
system(cmd,'-echo')
javaaddpath(pwd)

%# run it
javaMethodEDT('main','HelloWorld','')

screenshot

You could try calling Java commands directly in MATLAB (as @DarkByte has shown), but at some point, you have to handle OpenGL events by implementing GLEventListener interface methods: init, display, reshape, etc.. As you can't define Java classes directly in MATLAB, you might as well write the whole thing in Java as I did.

like image 161
Amro Avatar answered Oct 10 '22 23:10

Amro