Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Corsi, Tutorial e FAQ (https://www.hwupgrade.it/forum/forumdisplay.php?f=56)
-   -   [Tutorial Java] Java3D (https://www.hwupgrade.it/forum/showthread.php?t=1496341)


PGI-Bis 19-06-2007 13:05

[Tutorial Java] Java3D
 
Guida in costruzione.

tutorial.pdf

Appena scopro come funziona il bump-map (ci sono mille esempi, ce ne fosse uno in cui si capisce qualcosa :grrr:) lo aggiorno.

PGI-Bis 19-06-2007 15:16

Intanto ho già scritto una bella str...

per compilare javac -cp .;* e per eseguire java -cp .;*
whops

^TiGeRShArK^ 19-06-2007 15:24

:p
x ora non ho tempo di giocare con Java 3d ma magari + in là mi piacerebbe darlgi un occhiata...
Ma una domanda....
qualche tempo fa non si diceva che Jogl avrebbe preso il posto di Java3d o me lo sono sognato? :confused:

PGI-Bis 19-06-2007 15:33

Opto per la seconda che hai detto :D.

franksisca 19-06-2007 23:10

Quote:

Originariamente inviato da PGI-Bis (Messaggio 17584043)
Guida in costruzione.

tutorial.pdf

Appena scopro come funziona il bump-map (ci sono mille esempi, ce ne fosse uno in cui si capisce qualcosa :grrr:) lo aggiorno.

lo sapevo che bastava stuzzicarti un poco:D :D :D :D


grazie, appena possibile la inizio a studiare;)

pisto 20-06-2007 10:42

ma riguardo alla performance come va java3d? e jogl?

PGI-Bis 20-06-2007 11:42

Per esemplificare il rapporto che c'è tra Java3D e Jogl, eseguendo il programma Java3D con l'opzione

-Dj3d.rend=jogl

Java3D usa le librerie jogl per la pipeline di rendering (jogl deve essere installato).

Quanto alle performance non saprei dire. Bisognerebbe avere un tot di programmi fatti sia in Java3D che in altro e poi confrontarli.

^TiGeRShArK^ 20-06-2007 13:39

nel sito di jake2 era scritto che le prestazioni con lwjgl sono leggermente migliori rispetto a jogl.
Però non viene fatto il confronto tra java3d e jogl.. qdi non ho idea :fagiano:

PGI-Bis 20-06-2007 13:48

JOGL e Java3D non sono comparabili. Sarebbe come confrontare JOGL con JOGL, visto che Java3D usa (può usare) JOGL come un pezzo di sè.

Java3D è qualcosa che sta sopra a JOGL. JOGL tratta di triangoli, Java3D di solidi, materiali, movimento, interazione e balle varie :D.

pisto 20-06-2007 13:49

ma java3d su cosa si appoggia?

edit: ho visto. ma quindi, visto che per quanto niubbamente so solo OpenGL è presente su tutti i sistemi, alla fine java3D=opengl con un po' di astrazione?
e poi, per fare grafica 2d molto performante in java, ha senso usare Opengl? (ho letto da qualche parte che ogl aveva roba anche per 2d magari dico cazzate)

PGI-Bis 20-06-2007 13:57

Per la proiezione dei contenuti ha due pipeline "interne", una opengl e una directx, più una pipeline esterna, jogl.

Queste pipeline sono a loro volta dei ponti JNI, alla jogl.

Queste pipeline non sono esposte. Si lavora con dei "primitivi" Java: tuple, punti, matrici, texture, geometrie eccetera.

PGI-Bis 20-06-2007 14:11

Quote:

Originariamente inviato da pisto (Messaggio 17599877)
ho visto. ma quindi, visto che per quanto niubbamente so solo OpenGL è presente su tutti i sistemi, alla fine java3D=opengl con un po' di astrazione?
e poi, per fare grafica 2d molto performante in java, ha senso usare Opengl? (ho letto da qualche parte che ogl aveva roba anche per 2d magari dico cazzate)

La grafica 2D performante in Java si fa con Java2D. Il mito vuole che per disegnare Java usi la marmellata di fragole. La realtà è che la piattaforma standard Java SE disegna tramite DirectX o OpenGL o via software se manchi un acceleratore grafico.

Certo bisogna leggersi qualcosa prima di avventurarsi nella grafica 2d. Ad esempio forse non tutti sanno che dire una cosa tipo:

BufferedImage image = ImageIO.read(il file);
...un graphics.drawImage(image, eccetera...);

è corretta ma non sfrutta le capacità della pipeline di rendering Java2D. Prima di essere disegnata, un'immagine destinata ad un uso "intensivo" deve essere convertita ad un formato compatibile con il display. Si prende il GraphicsConfiguration dello schermo, si crea un buffer "ottimizzato", gli si copia dentro l'immagine letta dal file e il disegno di quell'immagine ottimizzata è non una o due ma decine di volte più rapido dell'originale.

Lo stesso vale per il disegno in sè e per sè. Normalmente si prende un JComponent e si sovrascrive il metodo paintComponent. Ma la grafica "ad alte prestazioni" in Java si ottiene usando un BufferStrategy, ricavato da un Canvas o un Frame.

Poi ci saranno anche piattaforme più agili, per carità. Ma io, cioè mr. nessuno, penso che sia importante sottolineare che discutere di prestazioni richiede una minima conoscenza della piattaforma di cui si discute.

Ps.: forse sono riuscito a fare il reverse engineering di un file class che contiene un esempio di DOT3 Bump Mapping! Ahhh, è sempre bello quando una librerie è ben documentata! :grrr:

pisto 20-06-2007 14:24

ok ho capito, era solo una curiosità per un mio progetto moooolto futuro
Quote:

Originariamente inviato da PGI-Bis (Messaggio 17600353)
Ps.: forse sono riuscito a fare il reverse engineering di un file class che contiene un esempio di DOT3 Bump Mapping! Ahhh, è sempre bello quando una librerie è ben documentata! :grrr:

perché, jad non ti funziona?

PGI-Bis 20-06-2007 14:26

No, uso Cavaj. Il problema è che ci sono una marea di costanti e te le spara tutte come numeri perchè il compilatore le "hard" codifica.

M'è cresciuto un terzo occhio a forza di saltare dal codice alla documentazione, dal codice alla documentazione... :D.

^TiGeRShArK^ 20-06-2007 15:01

Quote:

Originariamente inviato da PGI-Bis (Messaggio 17599866)
JOGL e Java3D non sono comparabili. Sarebbe come confrontare JOGL con JOGL, visto che Java3D usa (può usare) JOGL come un pezzo di sè.

Java3D è qualcosa che sta sopra a JOGL. JOGL tratta di triangoli, Java3D di solidi, materiali, movimento, interazione e balle varie :D.

ah okz capito :p

PGI-Bis 20-06-2007 19:53

Ho aggiornato il tutorial con il bump map, che è tutto dire perchè funziona ma non so come :fagiano:. Spero di essere stato sufficientemente esplicito perchè si capisca che non so. E' importante.



Ps.: ho usato il plug-in "normal map" di gimp per generare la mappa di normali. Comunque è tutto scritto.

1A2L6E9 10-11-2007 18:44

mi serve una mano con Java3D!!!
 
Ciao a tutti,
ho scaricato la j2sdk1.4 e Java3D dal sito della Sun.
Dopodichè ho dovuto spostare la cartella Java3D all'interno di quella della sdk.
Quanto compilo un programma, l'output è questo:

C:\Documents and Settings\Alessio\JavaApplication1\src\javaapplication1\Cubo1.java:41: cannot access javax.media.j3d.BranchGroup

bad class file: C:\j2sdk1.4.2_13\jre\lib\ext\j3dcore.jar(javax/media/j3d/BranchGroup.class)

class file has wrong version 49.0, should be 48.0

Please remove or make sure it appears in the correct subdirectory of the classpath.

BranchGroup createContentBranch() {

1 error

BUILD FAILED (total time: 0 seconds)

Aiutatemi grazie mille, devo assolutamente iniziare con Java3D!!! :D

PGI-Bis 10-11-2007 22:04

credo che le ultime versioni di Java 3D siano compatibili con Java 5 o superiore. Il messaggio che ti trovi per le mani indica esattamente un'incompatibilità tra la versione di Java per cui è stata prodotto una certa libreria (javax.media.eccetera) e la tua Jvm (che accetta al massimo versioni 1.4).

Aggiorna il tuo JRE / JDK, è la via più semplice.

franksisca 10-11-2007 23:47

ma, in parole pratiche, java nei giochi quanto è meno potente rispetto agli altri linguaggi???

Usando anche compilatori JIT???

1A2L6E9 11-11-2007 19:40

..ancora problemi..
 
:cry:
ora ho installato la versione supportata, infatti quando complilo il programma non da nessun tipo di problema.
Il problema esce quando lo eseguo (con vari programmi me lo fa) :

Exception in thread "main" java.lang.NullPointerException: Canvas3D: null GraphicsConfiguration
at javax.media.j3d.Canvas3D.checkForValidGraphicsConfig(Canvas3D.java:963)
at javax.media.j3d.Canvas3D.<init>(Canvas3D.java:1006)
at Cubo1.<init>(Cubo1.java:31)
at Cubo1.main(Cubo1.java:15)
Questo errore si riferisce alla seguente istruzione:
Canvas3D c = new Canvas3D(null);
Ho guardato su alcuni tutorial, dove anche lì l'oggetto viene inizializzato a null.
Ancora grazie mille per l'aiuto ma non so proprio a chi rivolgermi. :D

PGI-Bis 11-11-2007 20:44

Molti tutorial fanno riferimento alla versione 1.3 di Java3D perchè lo sviluppo delle librerie ha subito uno stop prolungato prima di essere ripreso. Le ultime versioni di Java3D non consentono l'uso di null come configurazione per un Canvas3D.

Puoi creare una configurazione ad hoc oppure usare i valori predefiniti in SimpleUniverse.getPreferredConfiguration():

Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration());

1A2L6E9 12-11-2007 19:10

......
 
mi hai risolto tutti i problemi! Ora mi immergo a programmare in 3D! O almeno ci provo! Grazie mille :cincin:

MictiaN 05-12-2007 16:00

scusate l'up ma dovevo fare i complimenti per il tutorial! xD
ah cmq m presento dato che sono nuovo
mi chiamo francesco.

ok basta cn le idiozie xD

vorrei chiederti un'informazione
hai in progetto altri tutorial per java 3d?
vorrei fare un ambiente dove ci si possa muovere e interagire con altri oggetti(inteso come cose solide), che mi stò preparando una specie di "gioco" ( se vogliamo chiamarlo così) da portare come tesi all'esame del 5°(faccio un itis per l'informatica e dato che sembra un progetto molto lungo inizio da ora che stò in 4°)
oppure ne conosci qualcuno? possibilmente in italiano ma anche se è in inglese non è un problema:)

grazie mille^^

ok piccolo problema!
quando vado per eseguire mi dà questo stacacchio di errore

chi me lo spiega?O.O

banryu79 06-12-2007 12:18

In riferimento a questo post (molto interessante)
 
Quote:

Originariamente inviato da PGI-Bis (Messaggio 17600353)
La grafica 2D performante in Java si fa con Java2D. Il mito vuole che per disegnare Java usi la marmellata di fragole. La realtà è che la piattaforma standard Java SE disegna tramite DirectX o OpenGL o via software se manchi un acceleratore grafico.

Certo bisogna leggersi qualcosa prima di avventurarsi nella grafica 2d. Ad esempio forse non tutti sanno che dire una cosa tipo:

BufferedImage image = ImageIO.read(il file);
...un graphics.drawImage(image, eccetera...);

è corretta ma non sfrutta le capacità della pipeline di rendering Java2D. Prima di essere disegnata, un'immagine destinata ad un uso "intensivo" deve essere convertita ad un formato compatibile con il display. Si prende il GraphicsConfiguration dello schermo, si crea un buffer "ottimizzato", gli si copia dentro l'immagine letta dal file e il disegno di quell'immagine ottimizzata è non una o due ma decine di volte più rapido dell'originale.

Lo stesso vale per il disegno in sè e per sè. Normalmente si prende un JComponent e si sovrascrive il metodo paintComponent. Ma la grafica "ad alte prestazioni" in Java si ottiene usando un BufferStrategy, ricavato da un Canvas o un Frame.

[omissis]

PGI-Bis, intanto complimenti e grazie per l'eccellente tutorial e per la precisione delle info che dai.

Mi piacerebbe capire meglio quello che succede "dietro le quinte" in quanto a rendering grafico al fine di un efficacia maggiore programmando in ambito grafico 2D e 3D in ambiente Java, per pc desktop/laptop.

Ho trovato interessante la spiegazione della tecnica per rendere più performante un'immagine da renderizzare e l'altro discorso sul rendering: volevo chiederti se mi puoi indicare dei link/tutorial o altro materiale da studiare per approfondire questo aspetto (sempre in ambito Java)

Ciao :)

@EDIT:
PGI-Bis, grazie mille, ottimo link davvero e grazie anche della spiegazione :)

PGI-Bis 07-12-2007 21:37

banryu76, sulle immagini Java c'è un vecchio ma sempre attuale articolo sul blog di chet haase, un ingegnere di Sun che si occupa della pipeline Java2D

http://weblogs.java.net/blog/chet/ar...tbuffered.html

Il disegno dietro le quinte è in verità piuttosto semplice. Lato Java noi disegnamo usando direttamente o indirettamente un oggetto di tipo Graphics2D. Graphics2D è un'astrazione dell'insieme di operazioni di disegno disponibili nella piattaforma Java standard e alle spalle di questa astrazione esiste un concreto Graphics2D che varia da piattaforma a piattaforma e realizza le capacità di disegno astratte invocando o altro codice Java o codice nativo. Il codice nativo, vale a dire il codice macchina specifico per un certo sistema operativo ed una certa architettura di calcolatore, è prodotto appoggiandosi o alle librerie directx o alle opengl o a librerie di soft-rendering licenziate da Sun e sviluppate in collaborazione con un tot di terze parti. Queste ultime esistono per consentire alla piattaforma Java di avere un comparto grafico a prescindere dall'esistenza di un acceleratore video.

Fatta salva la portabilità, il sistema complessivo è identico a ciò che si fa per disegnare in due o tre dimensioni usando, ad esempio, OpenGL: ottenuta dal sistema una superficie disegnabile si inviano una serie di comandi l'esecuzione dei quali produce un'immagine sullo schermo. Java2D nasconde l'atto di generazione della superficie e ti fa disegnare con un ponte (Graphics2D) tra le istruzioni virtualmente disponibili e quelle concretamente usate.

Capire quale sia il modo più efficace per disegnare in Java significa semplicemente scovare quali istruzioni disponibili attraverso Graphics2D abbiano una controparte diretta e quali siano invece riprodotte attraverso dei passaggi intermedi. Sul blog di Haase trovi molte indicazioni in tema.

Mictian, non conosco tutorial che si occupino in modo comprensibile ad un profano come il sottoscritto di collisioni e affini. Ho in programma di scrivere qualcosa sul tema per le librerie Java3D appena il tempo (tiranno) e le capacità (scarse) me lo permetteranno.

MictiaN 08-12-2007 14:05

guarda se mi dai una mano a capire quell'errore posso pure darti una mano a capire più roba di java 3d e magari a farne un tutorial!^^

PGI-Bis 09-12-2007 10:10

Devi usare il nome pienamente qualificato della classe che dichiara il metodo main:

java it.quickjava3d.Main

pepperepe2 07-03-2008 12:20

jaja 3d problema e soluzione
 
per prima cosa stò scrivendo nella giusta sezione del forum?

secono
stò cercando di implementare in java 3d la seguente applicazione :

apro un "mondo"
clicco su un oggetto
questo si selezione
l'oggetto selezionato viene passato come argomento a funzioni che fanno certe cose ( cambiare texture , scalare , ruotare, traslare ecc)

ma quando faccio il loading di un universo come faccio a intercettae l'oggetto sul quale ho cliccato
come si usa pickcanvas ? sapete dove posso trovare un esempio a riguardo

franksisca 09-03-2008 12:09

plugin eclipse java3d
 
salve, oggi, girando per la rete alla ricerca di un loader per blender ho trovato questo:
http://sourceforge.net/projects/java3d-eclipse/

volevo sapere se qualcuno è riuscito ad installarlo e se vale la pena usarlo....

franksisca 10-03-2008 17:04

aiutatemi!!!


ho seguito la guida sul sito ma non mi visualizza lo stasso....non è che devo usare qualche versione particolare di eclipse???

Blackskull182 03-04-2012 12:41

Grazie per la segnalazione


Tutti gli orari sono GMT +1. Ora sono le: 13:30.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.