非常に単純な Java 3D エディターを作成したい (実験用)。基本的な JavaFX の使用法を知っており、OpenGL の知識も十分に持っています。しかし、私の OpenGL の経験はすべて C/C++ での作業から得たものです。
JavaFx アプリケーションで「キャンバス」を作成し、その上に OpenGL ビューポートをマップできますか?
内部的には、JavaFX は OpenGL をレンダリング パイプラインとして使用できるため、競合を避けるために 2 つの間の統合には注意が必要です。
JavaFX の OpenGLNode
JavaFX チームのリードである Richard Bair は、openjfx 開発メーリング リストに次のように投稿しました。
8 の更新で (たとえば) やりたいことの 1 つは、OpenGLNode や NativeSurfaceNode などを用意して、独自の D3D / OpenGL を実行している場合に、これらの生のコマンドをグラフィックス カードを削除しますが、ノードはシーン グラフに合成されたままです。
そのため、将来の JavaFX リリースの更新には、OpenGLNode が含まれる可能性があります。このような機能は、最初の Java 8 リリース後の次の JavaFX 機能リリースまで、おそらく JavaFX の一般公開リリースに含まれることはありません (私の推測では、2014 年 9 月頃になると思います)。
サードパーティ OpenGL/JavaFX 統合
JavaFX と OpenGL の統合を開始するのにそれほど長く待つ必要はありません。実装を開始するために必要なソース コードはすべてOpenJFX リポジトリで公開されているため、 lwjglやjoglなどのライブラリを使用して、そのコードのカスタム統合を構築してみることができます。
この回答は、開発者が JavaFX と OpenGL API の既存の Java ラッパーとの統合を開始するにつれて時代遅れになります。一部の開発者はすでにそのような作業を開始しています。Google 検索を実行するlwjgl javafx
かjogl javafx
、現在の統合プロジェクトとそのステータスについて調べてください。
最も単純な統合は、サードパーティのライブラリをオフスクリーン バッファにレンダリングし、必要に応じてピクセルをバッファから JavaFX WritableImageまたはCanvasに転送して、OpenGL でレンダリングされたグラフィックスを JavaFX シーン グラフに合成することです。
JavaFX 3D API 代替
JavaFX には、フォン シェーディングされた 3D モデルを JavaFX シーン グラフに合成する機能を提供する独自の軽量 3D API があります。JavaFX 3D API は、完全な OpenGL API 統合のすべての機能を提供するわけではありませんが、JavaFX 3D API の使用は比較的簡単です。Java 8の 3D 機能のコード例を含む説明は、open-jfx wiki にあります。
Interactive Mesh は、JavaFX 用の無料の3D モデル インポーターを提供します。これにより、複雑なシェーディングおよびテクスチャ 3D モデルを JavaFX シーン グラフに非常に簡単に取り込むことができます。
openjfx リポジトリには3Dビューアー プロジェクトがあり、これをフォークして、提案する JavaFX ベースの 3D エディターの基礎を作成できます。
nashorn JavaScript エンジンには、JavaScriptから JavaFX とその 3D 機能を使用できるようにするスイッチがあるため、必要に応じて代替 jvm 言語を使用して JavaFX 3D 機能にアクセスできます。
はい、もちろん、JOGLを使用して、C/C++ でできるように Java で OpenGL でできるすべてのことを効果的に達成できます。