PDA

View Full Version : [Java3D] ottenere "on-screen buffer"


fero86
02-07-2010, 13:15
salve a tutti.

esiste in Java3D un modo per ottenere un ImageComponent2D contenente i frame renderizzati anche quando il Canvas3D si trova in modalitá di rendering on-screen anziché off-screen?

faccio questa domanda perché stavo riflettendo su come si potrebbe realizzare in Java3D un effetto di motion blur in maniera efficiente. l'ho giá fatto in passato con JOGL: il principio per il motion blur efficiente é quello di renderizzare sopra ad ogni frame il frame precedente in semitrasparenza, lo si fa molto facilmente con uno shader.

in JOGL il mio ciclo di rendering era fatto come segue:
1. renderizza il frame corrente
2. disattiva l'eventuale depth testing ed altri eventuali per-pixel tests
3. renderizza un poligono rettangolare grosso quanto tutto lo schermo usando come texture una texture T contenente il frame precedente; il poligono deve essere semitrasparente (io come valore di alpha ho usato 0.65)
4. copia il frame corrente nella texture T (in OpenGL si fa con glCopyTexImage2D)
5. riattiva l'eventuale depth testing ecc.

in Java3D come posso fare, sempre che si possa?

PS: per vedere il motion blur descritto guardate 3D Volley Demo nella mia firma :p

fero86
03-07-2010, 17:00
up, anche se purtroppo temo che non ci sia nulla da fare :stordita:

PGI-Bis
04-07-2010, 17:39
Non ho mai provato ma penso che si possa fare con un offscreen canvas. Proietti la scena on-screen su un canvas off-screen, pigli l'immagine e la usi come texture. Se dai un'occhiata per "java3d render to texture" o "offscreen canvas" trovi anche qualche demo.

fero86
06-07-2010, 23:35
si, avevo giá pensato alla soluzione col secondo canvas off-screen, ma mi domando se sia ugualmente efficiente; di sicuro c'é un consumo inutile di risorse.

peró dalla tua risposta evinco che non c'é altro modo.