开发者

Using OpenGL in Matlab with Java?

开发者 https://www.devze.com 2023-04-07 22:34 出处:网络
In Matlab I have import javax.media.opengl.GL; How do I now use OpenGL? Can anyone provide a very small sample?

In Matlab I have

import javax.media.opengl.GL;

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

Pl开发者_开发百科ease note: If this wasnt in Matlab then it would be easy. But the question specifically relates to using this in Matlab.


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','')

Using OpenGL in Matlab with Java?

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.


Some info from this link:

  • In matlab, you do not need to type "new"--objects are created as needed.
  • In matlab, you use 'single quotes' where you use "double quotes" in java.
  • In java you call a routine with no inputs by putting () after its name. This is unnecessary in matlab.

Little example:

import javax.swing.*

J = JFrame('Hi there')
L = JLabel('A Label');
P = J.getContentPane
P.add(L)
J.setSize(200,200);
J.setVisible(1)

And please check here for the MathWorks documentation.

0

精彩评论

暂无评论...
验证码 换一张
取 消