2009-08-28 8 views
0

私はJava3D 1.5.2を使用して画面レンダリングを動作させようとしています。私のsource codeでは、私はSimpleUniverseにオフスクリーンレンダリングを行います拡張Canvas3Dを添付しようとしてきたが、これは破壊されるレンダリング:オフスクリーンレンダリングCanvas3Dが機能しないのはなぜですか?

62. // FOR SOME REASON THIS BREAKS RENDERING 
63. universe.getViewer().getView().addCanvas3D(canvas); 

完全なソースコードは、上のペーストには少し大きすぎますStackOverflowので、Pastie経由でhere以上で利用可能にしました。

Line 63はコメントアウトされており、通常のCanvas3Dでは画面上のレンダリングが行われています。キューブをレンダリングし、これをJFrameに表示します。ただし、コメントを削除すると、オフスクリーンレンダリングによってオンスクリーンのレンダリングが行われなくなります。また、オフスクリーンレンダリングは "大きな黒い何も" BufferedImageを返します。

私はオフスクリーンレンダリング作業を行う方法、つまり、回転したキューブのシーンをバッファリングされたイメージにレンダリングする方法を知りたいと思います。私はJava3Dでオフスクリーン描画のサンプルコードを提供してきましたが、オフスクリーンバッファをスクリーン上のウィンドウに戻すためにはRasterオブジェクトを使用する点を除いて同様です。

答えて

1

Screen3Dの物理的な寸法が間違っている可能性があります。値は、物理的な画面のサイズ(メートル単位)とします。

screen3D.setPhysicalScreenWidth(0.0254/90.0 * destWidth); 
screen3D.setPhysicalScreenHeight(0.0254/90.0 * destHeight); 

値はScreen3D javadocの先頭からの値です。問題のある行は、少なくとも私のために、上記のコードと一緒に働いた:)

間違った物理的な寸法を設定すると、レンダリングされたイメージのアスペクト比も変わることがあります。

+0

甘い、それは動作します! Btwは、プログラムを終了させるために私がしなければならないことをしています。あたかもリソースがまだ動いているかのようにレンダリングが実行されても、まだ実行中です。 (私はuniverse.cleanup()を呼び出していますが、十分ではないようです)。私はその答えを受け入れます。 – Spoike

+0

私はすべてのフレームを.dispose()しようとします。それでも動作しない場合は、System.exit(0)を呼び出すと、jvmが終了します。あなたがjvmを実行し続ける必要があるなら、より多くの研究が必要です:) – Melv

+0

ええ、私はSystem.exit(0)を使用して考え出しましたが、それ以上の優雅さは必要ないので大丈夫です。ありがとう。 – Spoike

関連する問題