Использование OpenGL в Matlab с Java? - PullRequest
6 голосов
/ 26 сентября 2011

В Matlab у меня есть

import javax.media.opengl.GL;

Как мне теперь использовать OpenGL? Кто-нибудь может предоставить очень маленький образец?

Обратите внимание: если бы это не было в Matlab, это было бы легко. Но вопрос конкретно касается использования этого в Matlab.

Ответы [ 2 ]

8 голосов
/ 27 сентября 2011

MATLAB поставляется с библиотеками JOGL 1.x, доступными по его статическому пути к классам, поэтому необходимо скомпилировать исходный код (с этими файлами JAR в пути к классам), а затем запустить программу внутри MATLAB.

Ниже приведен пример OpenGL "Привет, мир" в Java. Я покажу, как скомпилировать и запустить его прямо из 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

Вы можете попробовать вызывать Java-команды непосредственно в MATLAB (как показало @DarkByte), но в какой-то момент вы должны обрабатывать события OpenGL, реализуя GLEventListener методы интерфейса: init, display, reshape и т. Д. Как вы Вы не можете определять Java-классы напрямую в MATLAB, вы можете написать все это на Java, как я.

0 голосов
/ 26 сентября 2011

Некоторая информация по этой ссылке :

  • В Matlab вам не нужно вводить «новый» - объекты создаются по мере необходимости.
  • В Matlab вы используете «одинарные кавычки», а в «Java» - «двойные».
  • В Java вы вызываете подпрограмму без входных данных, помещая () после ее имени. Это не нужно в Matlab.

Маленький пример:

import javax.swing.*

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

И, пожалуйста, проверьте здесь для документации MathWorks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...