2013-06-05 26 views
14

Voglio scrivere un editor Java 3D molto semplice (per esperimento). Conosco l'utilizzo di base di JavaFX e conosco abbastanza la conoscenza di OpenGL. Ma tutta la mia esperienza OpenGL deriva dal lavorare con C/C++.Come utilizzare OpenGL in JavaFX?

Posso creare una "tela" nell'applicazione JavaFx e mappare la finestra OpenGL su di essa?

+0

Non ci sono molti esempi su Internet, ma una implementazione può essere vista qui: http://www.java-gaming.org/topics/lwjgl-javafx-integration/27801/view.html – Appleshell

+0

Puoi usare questo progetto come base: https://github.com/Spasi/LWJGL-FX –

risposta

14

Internamente, JavaFX può utilizzare OpenGL come pipeline di rendering, quindi è necessario prestare attenzione all'integrazione tra i due per evitare conflitti.

OpenGLNode in JavaFX

Richard Bair, responsabile del team JavaFX pubblicato sul openjfx development mailing list:

Una cosa che voglio vedere realizzate (per esempio) per l'aggiornamento 8 è di avere un OpenGLNode o NativeSurfaceNode o qualcosa del genere lungo queste linee in modo che se stai facendo il tuo D3D/OpenGL puoi avere un modo per inviare quei comandi grezzi alla scheda grafica ma avere ancora il tuo nodo composto nel grafico della scena.

Quindi un futuro aggiornamento della versione JavaFX potrebbe includere un OpenGLNode. Una funzionalità di questo tipo probabilmente non vedrebbe l'inclusione in una release di disponibilità generale JavaFX fino alla successiva release di funzionalità JavaFX dopo la versione iniziale di Java 8 (suppongo che ciò si riferisca a circa settembre 2014).

3rd Party OpenGL/JavaFX integrazione

Non è necessario aspettare così a lungo per iniziare l'integrazione di JavaFX e OpenGL. Tutto il codice sorgente richiesto per avviare un'implementazione è aperto nello OpenJFX repository, quindi potresti provare a creare un'integrazione personalizzata di quel codice con una libreria come lwjgl o jogl.

Questa risposta sarà datata quando gli sviluppatori inizieranno a eseguire integrazioni di JavaFX con i wrapper Java esistenti per apri OpenGL. Alcuni sviluppatori hanno già iniziato questo tipo di lavoro: esegui una ricerca su google su lwjgl javafx o jogl javafx per scoprire i progetti di integrazione attuali e il loro stato.

L'integrazione più semplice è probabilmente quello di avere una biblioteca 3rd party rendere ad un buffer schermo spento poi trasferire i pixel dal buffer a un JavaFX WritableImage o Canvas come richiesto per ottenere la grafica OpenGL reso mescolati nel grafo della scena JavaFX.

JavaFX 3D API alternativa

JavaFX ospita un api 3D leggero che fornisce la capacità di phong composito ombreggiata modelli 3d nel diagramma scena JavaFX. Java API 3DFX non fornirà tutta la potenza di un'integrazione completa di API OpenGL, tuttavia l'utilizzo dell'API JavaFX 3D è relativamente semplice. Una descrizione, con esempi di codice dello 3D features in Java 8 is on the open-jfx wiki.

Interactive Mesh fornisce uno 3D model importer for JavaFX gratuito, che consente di portare molto facilmente modelli 3D tratteggiati e strutturati in un grafico di scene JavaFX.

C'è un 3D Viewer project nello openjfx repository che è possibile inserire per creare una base per l'editor 3D basato su JavaFX proposto.

Il motore JavaScript nashorn ha uno switch che consente di utilizzare use JavaFX and its 3D features from JavaScript, quindi è possibile utilizzare linguaggi jvm alternativi per accedere alle funzionalità di JavaFX 3D se si preferisce.

+5

Quindi, è trascorso quasi 1 anno ... Esistono notizie su OpenGLNode? –

+4

No Sarge, puoi provare a chiedere sulla mailing list collegata nella risposta. – jewelsea

+1

Questa aggiunta è auspicabile a JavaFX. Vorrei che questo si concretizzasse. –

2

Sì, con tutti i mezzi, è possibile utilizzare JOGL per ottenere in modo efficace tutto ciò che è possibile in Java con OpenGL come è possibile in C/C++.

+8

Puoi usare JOGL o LWJGL per usare OpenGL da Java, ma non è così semplice implementarlo in una finestra JavaFX esistente. – Appleshell

+0

Questo non risponde molto alla domanda. La domanda chiede come, la risposta punta solo in una direzione generale. – Suma

Problemi correlati