2

レンダリングにjava3dを使用してJavaで記述された3D地球儀アプリケーションに取り組んでいます。基本的に、開発スナップショットからプログラムファイルディレクトリにファイルをコピーするWindowsインストーラーがあります。develスナップショットからは正常に実行されますが、インストール後に実行すると、次のようになります。

Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=1.1)  
javax.media.j3d.IllegalRenderingStateException: GL_VERSION  
    at javax.media.j3d.NativePipeline.createNewContext(Native Method)  
    at javax.media.j3d.NativePipeline.createNewContext(NativePipeline.java:2736)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:4895)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:2421)  
    at javax.media.j3d.Renderer.doWork(Renderer.java:895)  
    at javax.media.j3d.J3dThread.run(J3dThread.java:256)  

開発ディレクトリ内のすべてのライブラリとjarを比較しましたが、ファイルはすべてまったく同じであり、欠落しているものはありません。それは最も奇妙なことです。グラフィックドライバを更新しました(ただし、開発スナップショットから問題なく実行されるため、明らかに十分です)。Canvas3Dを作成し、それにColorCubeを追加できる単純なjava3dアプリを作成しました。正常に動作します。Ps私たちの開発スナップショットには、すべてのdll、jar、および実行元のjreが含まれています。すべてのライブラリとjvmのバージョンをログに記録しますが、これらはdevelスナップショットとインストールされたアプリケーションから生成されたログでまったく同じです。java.exe(.. \ jre \ bin \ java.exe)への明示的なパスを使用して実行するため、PATH変数は機能しません。

これをデバッグするためのアイデアを探しています。すべてのGL属性、特にGL_VERSIONを出力する単純なJavaアプリを作成して、2つのセットアップ間の定量化可能な違いを示したいと思います。java3dのドキュメントはそれをカバーしておらず、GL_VERSIONの問題をインターネットで検索するたびに、ドライバーを更新するように指示されています。

ああ、私はNvidia QuadroFX3800カードを持っています。実は2つ。

要約すると...
Q1:java3dアプリケーションのGL_VERSIONをどのように出力しますか?
Q2:一体何が起こっているのですか?

4

2 に答える 2

0

2枚のグラフィックカードについて入力した後、最近、4台のモニターから3台のモニターに切り替えたので、新しいラップトップに4枚目を使用できるようになりました。私たちのアプリケーションが私のホームフォルダにいくつかのプロパティを保存していたので、4番目の現在は存在しないモニターでアプリケーションが起動しました。java3dは、存在しない画面スペースで十分にサポートされているopenglを検出できなかったようで、上記の例外をスローしました。有効な画面座標でアプリケーションを起動すると、問題が解決しました。

于 2009-12-01T18:10:04.307 に答える
0

GL_VERSIONを確認するには、Canvas3DでqueryProperties()メソッドを使用します。

String glVersion = (String)getCanvas3D().queryProperties().get("native.version");

ただし、このエラーはOpenGLの正確なバージョンを表示しません。上記のコードを使用すると、スタックトレースのようにGL_VERSIONが1.1ではないことがわかります(OpenGL 1.5をインストールしても同じエラーが発生しました)。

于 2012-03-02T13:29:28.913 に答える