Aggiungere una "terza dimensione" a una forma
- Pasquiindustry
- Membro super
- Messaggi: 918
- Iscritto il: 30/06/2011, 23:23
- Specialità: ModernUI + Tweaks
- Uso: GameMaker 8.1
- Località: Conversano (bari)
- Contatta:
Aggiungere una "terza dimensione" a una forma
Salve, volevo aggiungere una "terza dimensione" a una immagine semplice in *.png (ad esempio far diventare in 3D il mio logo, considerando che il rosso sia in realtà trasparente. Con Gamemaker è possibile? (a livello di modello)
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Usi le surface, vai di getpixel e ti ricavi un modello. Non è complicato anche se è lento(ma puoi sempre salvarti il modello a parte e quindi caricandolo come modello da file ci metti un niente)
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Pasquiindustry
- Membro super
- Messaggi: 918
- Iscritto il: 30/06/2011, 23:23
- Specialità: ModernUI + Tweaks
- Uso: GameMaker 8.1
- Località: Conversano (bari)
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Purtroppo capisco poco e niente di surface e 3d, però ho provato questo codice (esamino tutti i pixel e aggiungo un vertice alla primitiva se il pixel è bianco)Jak ha scritto:Usi le surface, vai di getpixel e ti ricavi un modello. Non è complicato anche se è lento(ma puoi sempre salvarti il modello a parte e quindi caricandolo come modello da file ci metti un niente)
[create]
Codice: Seleziona tutto
numeroattualeriga=1
numeroattualecolonna=1
d3d_primitive_begin(pr_pointlist)
while (numeroattualecolonna!=sprite_get_height(image_index))
{
while (numeroattualeriga!=sprite_get_width(image_index))
{
colorepixel=draw_getpixel(numeroattualeriga,numeroattualecolonna);
if colorepixel=c_white d3d_vertex(x+numeroattualeriga,y+numeroattualecolonna,0);
numeroattualeriga+=1;
}
numeroattualecolonna+=1;
}
Codice: Seleziona tutto
if numeroattualeriga=sprite_get_width(image_index)
if numeroattualecolonna=sprite_get_height(image_index)
d3d_primitive_end()
questo è come appare il gioco (l'arancione è il colore di background)
questa è l'immagine alla quale voglio aggiungere uno spessore (il grigio è la trasparenza).
Non sono molto sicuro di come si usa il while, ho provato a fare questo tentativo.
Ho anche un dubbio sulla comaparazione di c_white e i pixel bianchi
A pensarci bene, poi, non credo neanche di riuscire nel mio intento con questo metodo...
(scusatemi per la confusione di questo post e vi ringrazio in anticipo per le eventuali risposte )
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Ovviamente non basta un vertice al modello, in genere serve almeno un cubo(opportunamente ottimizzato con vari script)
Inoltre è chiaro che per farlo devi avere una buona conoscenza di for e 3d.
Proverò a buttare giu uno script dopo cena se mi viene voglia
Inoltre è chiaro che per farlo devi avere una buona conoscenza di for e 3d.
Proverò a buttare giu uno script dopo cena se mi viene voglia
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Et voilà!
http://njgames.altervista.org/files_mis ... te_3d.gm81
Ho commentato tutto a dovere, se non capisci qualcosa dubito di poterti aiutare più di così. La soluzione migliore è certamente quella di imparare bene la sintassi di GM e le basi del 3d prima di voler fare cose come queste ma fortunatamente questo script potrebbe essere utile a qualcun'altro di più esperto.
L'esempio è molto semplice, il mio script ha due argomenti, lo sprite e la profondità e fa tutto da solo, te basta che disegni il modello che ti restituisce.
Potrei provare a fare delle ottimizzazioni allo script per ridurre notevolmente il numero di triangoli eliminando quelli perennemente invisibili. Forse domani lo faccio.
Lo script per chi non ha gm8.1:
http://njgames.altervista.org/files_mis ... te_3d.gm81
Ho commentato tutto a dovere, se non capisci qualcosa dubito di poterti aiutare più di così. La soluzione migliore è certamente quella di imparare bene la sintassi di GM e le basi del 3d prima di voler fare cose come queste ma fortunatamente questo script potrebbe essere utile a qualcun'altro di più esperto.
L'esempio è molto semplice, il mio script ha due argomenti, lo sprite e la profondità e fa tutto da solo, te basta che disegni il modello che ti restituisce.
Potrei provare a fare delle ottimizzazioni allo script per ridurre notevolmente il numero di triangoli eliminando quelli perennemente invisibili. Forse domani lo faccio.
Lo script per chi non ha gm8.1:
Spoiler
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: Aggiungere una "terza dimensione" a una forma
jak, ma non sarebbe meglio fondere i vertici del modello anzichè creare tanti parallelepipedi?
so' che non è semplice, ma così è parecchio lento.
viene un "highpoly", senza motivo
so' che non è semplice, ma così è parecchio lento.
viene un "highpoly", senza motivo
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Tizzio ha scritto:jak, ma non sarebbe meglio fondere i vertici del modello anzichè creare tanti parallelepipedi?
so' che non è semplice, ma così è parecchio lento.
viene un "highpoly", senza motivo
Tra l'altro è anche sempliceJak ha scritto:Potrei provare a fare delle ottimizzazioni allo script per ridurre notevolmente il numero di triangoli eliminando quelli perennemente invisibili. Forse domani lo faccio.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: Aggiungere una "terza dimensione" a una forma
ottimoJak ha scritto:Potrei provare a fare delle ottimizzazioni allo script per ridurre notevolmente il numero di triangoli eliminando quelli perennemente invisibili. Forse domani lo faccio.
ho aggiunto la rotazione della telecamera, e una sottrazione per centrare il modello, e trasformato in gmk (per chi non avesse gm81)
PS: direi anche di aggiungere la profondità secondo una mask in bianco e nero che funga da height map
- Allegati
-
- esempio_sprite_3d.gmk
- (11.93 KiB) Scaricato 198 volte
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Stavo per postare l'esempio con i triangoli ridotti(che alla fine son comunque parecchi con immagini relativamente grandi) e con l'aggiunta dello spostamento della posizione di disegno del modello tramite freccette per vedere meglio(anche se pure io potrei fare la rotazione della telecamera).
Heightmap? Bella idea, mi sa che userò l'alfa del colore per unificare il tutto in un'unico sprite nonchè essere più veloce.
EDIT: Ovviamente non ci sono funzioni per prelevare l'alfa del colore dalla surface
Mi tocca fare uno sprite a parte.
Ora che ci penso le heightmap non sono affatto facili come ottimizzazione del numero di triangoli
Ma per correttezza lo faccio istes visto che male non fa
Heightmap? Bella idea, mi sa che userò l'alfa del colore per unificare il tutto in un'unico sprite nonchè essere più veloce.
EDIT: Ovviamente non ci sono funzioni per prelevare l'alfa del colore dalla surface
Mi tocca fare uno sprite a parte.
Ora che ci penso le heightmap non sono affatto facili come ottimizzazione del numero di triangoli
Ma per correttezza lo faccio istes visto che male non fa
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Nuova versione per gm8.0(anche se dovrebbe essere convertibile per gm6 e gm7)
http://njgames.altervista.org/files_mis ... ite_3d.gmk
Ora avete a disposizione i tasti per spostare modello e telecamera, le istruzioni in sovraimpressione e informazioni riguardanti fps e numero di triangoli del modello.
Nell'esempio avete 3 sprites di prova, basta che cambiate il codice nel create.
Non ho aggiunto altri commenti rispetto a prima, ci penserò quando aggiungerò il supporto alle heightmap(visto che ci metterò un po intanto vi rilascio la versione con tutto il resto)
Aggiunta l'opzione per centrare il modello(rubo le idee a tiz anche se il suo gmk non l'ho manco scaricato )
Dovrebbero mancare solo le heightmap, provvedo subito ma come ho detto per queste ci vorrà un po
http://njgames.altervista.org/files_mis ... ite_3d.gmk
Ora avete a disposizione i tasti per spostare modello e telecamera, le istruzioni in sovraimpressione e informazioni riguardanti fps e numero di triangoli del modello.
Nell'esempio avete 3 sprites di prova, basta che cambiate il codice nel create.
Non ho aggiunto altri commenti rispetto a prima, ci penserò quando aggiungerò il supporto alle heightmap(visto che ci metterò un po intanto vi rilascio la versione con tutto il resto)
Aggiunta l'opzione per centrare il modello(rubo le idee a tiz anche se il suo gmk non l'ho manco scaricato )
Dovrebbero mancare solo le heightmap, provvedo subito ma come ho detto per queste ci vorrà un po
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: Aggiungere una "terza dimensione" a una forma
fatto
Però non è ottimizzato, quindi meglio il tuo, jak
Però non è ottimizzato, quindi meglio il tuo, jak
- Allegati
-
- esempio_sprite_3d.gmk
- (12.84 KiB) Scaricato 196 volte
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
E' proprio quella la parte più complessa (ma neanche tanto, solo che sto perdendo tempo col nuovo video del capo)Tizzio ha scritto:Però non è ottimizzato
Scarico il tuo gmk così ti rubo lo sprite
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Pasquiindustry
- Membro super
- Messaggi: 918
- Iscritto il: 30/06/2011, 23:23
- Specialità: ModernUI + Tweaks
- Uso: GameMaker 8.1
- Località: Conversano (bari)
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Sto cercando di capire qualcosa, ma per me è quasi tutto arabo. Non sono ancora pronto per questo genere di cose (lo sarò mai?)
Vi ringrazio per gli esempi ed il supporto, vedrò in futuro di capirci qualcosa (sempre che non cambi ancora una volta progetto su cui lavorare...).
Vorrei solo capire una cosa: come funziona esattamente la funzione d3d_set_projection(...), su cosa mi devo basare per inserire correttamente i parametri che richiede (ad esempio per avere la camera puntata verso un oggetto a una certa altezza)?
Vi ringrazio per gli esempi ed il supporto, vedrò in futuro di capirci qualcosa (sempre che non cambi ancora una volta progetto su cui lavorare...).
Vorrei solo capire una cosa: come funziona esattamente la funzione d3d_set_projection(...), su cosa mi devo basare per inserire correttamente i parametri che richiede (ad esempio per avere la camera puntata verso un oggetto a una certa altezza)?
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Aggiungere una "terza dimensione" a una forma
Ecco la nuova versione provvista di heightmap. Uso gm8.1 per andare a 400 fps(rispetto ai 35 di gm8.0) probabilmente per via dell'uso della geometria statica nonchè per via del depth buffer più preciso che da una qualità decisamente migliore.
Come lo scorso esempio ci sono le istruzioni quindi cè poco da dire tranne che ho aggiunto vari controlli per la visualizzazione come lo zoom e la direzione(cioè se lo vedete di profilo come prima o verso l'alto per guardare meglio le heightmap)
Il modello è ottimizzato al massimo per non disegnare nemmeno un pixel extra(anche se magari il codice potrebbe essere riorganizzato leggermente meglio ma vabbè, dubito cambi moltissimo e non è comunque utilizzabile in real time quindi..., e nell'esempio ho usato sprite ed heightmap(opportunamente modificata da nocode) fatte da tizzio.
Se zoomate abbastanza entrerete nel modello e potrete vedere che il tutto è ottimizzato al meglio oppure nello script togliete le righe di codice riguardanti le facce per toglierle separatamente e guardare dentro il modello.
Le zone trasparenti ovviamente non disegneranno alcun triangolo mentre quelle di altezza 0 non disegnano i lati quindi è tutto al top level.
Per evitare che chi lo utilizza faccia casini ho fatto due script, uno che usa la heightmap ed uno che non lo usa così potete scegliere quello che più vi aggrada.
Link: http://njgames.altervista.org/files_mis ... te_3d.gm81
Son proprio soddisfatto di quel che è venuto fuori
Come lo scorso esempio ci sono le istruzioni quindi cè poco da dire tranne che ho aggiunto vari controlli per la visualizzazione come lo zoom e la direzione(cioè se lo vedete di profilo come prima o verso l'alto per guardare meglio le heightmap)
Il modello è ottimizzato al massimo per non disegnare nemmeno un pixel extra(anche se magari il codice potrebbe essere riorganizzato leggermente meglio ma vabbè, dubito cambi moltissimo e non è comunque utilizzabile in real time quindi..., e nell'esempio ho usato sprite ed heightmap(opportunamente modificata da nocode) fatte da tizzio.
Se zoomate abbastanza entrerete nel modello e potrete vedere che il tutto è ottimizzato al meglio oppure nello script togliete le righe di codice riguardanti le facce per toglierle separatamente e guardare dentro il modello.
Le zone trasparenti ovviamente non disegneranno alcun triangolo mentre quelle di altezza 0 non disegnano i lati quindi è tutto al top level.
Per evitare che chi lo utilizza faccia casini ho fatto due script, uno che usa la heightmap ed uno che non lo usa così potete scegliere quello che più vi aggrada.
Link: http://njgames.altervista.org/files_mis ... te_3d.gm81
Son proprio soddisfatto di quel che è venuto fuori
Spoiler
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Chi c’è in linea
Visitano il forum: Nessuno e 38 ospiti