2009-08-28 7 views
0

J'ai essayé de faire fonctionner le rendu hors écran en utilisant Java3D 1.5.2. Dans mon source code j'ai essayé d'attacher une étendue Canvas3D qui fera hors écran le rendu à SimpleUniverse, mais cela briserai le rendu:Pourquoi mon affichage hors écran Canvas3D ne fonctionne-t-il pas?

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

Le code source est un peu trop grand pour coller sur StackOverflow donc je l'ai mis à disposition via Pastie sur here.

La ligne 63 a été mise en commentaire et le Canvas3D ordinaire fait le rendu à l'écran. Il va afficher un cube et l'afficher dans un JFrame. Toutefois, si vous supprimez le commentaire, le rendu hors écran entraînera le rendu de l'affichage à l'écran. Aussi le rendu hors écran retournera un "grand rien noir" BufferedImage. Je voudrais savoir comment faire fonctionner le rendu hors écran, c'est-à-dire rendre la scène d'un cube pivoté à une image mise en mémoire tampon. J'ai regardé le code exemple fourni par Java3D pour le rendu hors écran et ils le font aussi bien (à l'exception qu'ils utilisent l'objet Raster pour rendre le tampon hors écran dans une fenêtre à l'écran).

Répondre

1

La dimension physique de Screen3D peut être incorrecte. La valeur est censée être la taille de l'écran physique en mètres. Vous pouvez tester avec:

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

Les valeurs proviennent du début du javadoc Screen3D. La ligne problématique a travaillé avec le code ci-dessus, au moins pour moi :)

La définition de la mauvaise dimension physique peut également modifier le format de l'image rendue.

+0

Doux, ça marche! Btw fais ce que je dois faire exactement pour que le programme sorte lui-même. Il est toujours en cours d'exécution même lorsque le rendu est effectué comme si une ressource était toujours en cours d'exécution et que je ne pouvais pas mettre le doigt dessus. (J'appelle universe.cleanup() mais cela ne semble pas suffisant). Je vais accepter la réponse après cela. – Spoike

+0

Je voudrais essayer .dispose() toutes les images. Si cela ne fonctionne pas, alors appelez System.exit (0), ce qui va tuer le jvm. Si vous avez besoin de jvm pour continuer à courir, alors d'autres recherches sont nécessaires :) – Melv

+0

Ouais, j'ai compris à l'aide de System.exit (0), mais je n'ai pas besoin de quelque chose de plus élégant que ça, alors ça va. Merci. – Spoike

Questions connexes