Importare modelli

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Ho abbandonato momentaneamente l'idea di farmi il mio modello 3D quindi ho usato il lucertolone che stava nell'esempio di GMAssimp, l'ho messo alle coordinate xyz di un oggetto che é nella stanza (oggetto che in draw disegna un blocco) ma invece di seguire il blocco, il lucertolone se ne va per fatti suoi... Da cosa dipende? E come lo risolvo? :furiosomedio:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
legogo
Membro attivo
Messaggi: 346
Iscritto il: 03/02/2014, 16:57
Specialità: fastidioso
Uso: GM:Studio 1.4 Free
Località: Cuneo(CN)
Contatta:

Re: Importare modelli

Messaggio da legogo »

vi consiglio una estensione (non la ho provata, ma secondo me, potrebbe essere utile, potrebbe non sono sicuro) ecco il link
https://marketplace.yoyogames.com/asset ... d-exporter

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Riuppo e aggiungo una domanda :asd:
Sto facendo un gioco di prova (quello che ho linkato nell'altro topic), ovvero un cubo che salta su altri cubi. Questi cubi sono tutti 32x32x32, io vorrei sostituire il cubetto che si muove con un modello 3D fatto da me, il problema è questo: come faccio a realizzare questo benedetto modello in modo che una volta importato abbia una dimensione di 32x32x32?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da Jak »

Nel programma di modellazione lo crei 32x32x32
Ricordati di usare semplicemente "unità" nel programma di modellazione e non tirare fuori metri, pollici e cazzate simili. O perlomeno imposta 1 unità = 1 metro/quelcheè in modo da avere una corrispondenza 1:1
Se te lo stai chiedendo un'unità non è un'unità di misura, è semplicemente un'unità, un numero e siccome nel computer non ci sono metri e simili ma semplicemente valori è chiaramente il sistema di misurazione standard. Valori puri.
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

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Jak ha scritto:Nel programma di modellazione lo crei 32x32x32
Ricordati di usare semplicemente "unità" nel programma di modellazione e non tirare fuori metri, pollici e cazzate simili. O perlomeno imposta 1 unità = 1 metro/quelcheè in modo da avere una corrispondenza 1:1
Se te lo stai chiedendo un'unità non è un'unità di misura, è semplicemente un'unità, un numero e siccome nel computer non ci sono metri e simili ma semplicemente valori è chiaramente il sistema di misurazione standard. Valori puri.
Mi sono scordato di aggiungere che sto provando con Blender, non riesco a trovare le misure, dove sono scritte? :furioso:

Edit:
Forse ho trovato, a sinistra ho un Vector e sotto posso modificare x, y, e z.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Allora, mi sono messo di impegno (non ci capivo niente :asd:) ma sono riuscito ad importare un benedetto modello 3D fatto da me con blender con le giuste dimensioni e a posizionarlo nella posizione che voglio io. Però ci sono un paio di problemi, diciamo 1,5 :)
Quello meno importante è che il modello che importo non è orientato correttamente ma è ribaltato. Per fare una prova ho fatto un cono con la punta verso l'alto, quando lo visualizzo nel gioco la punta è rivolta verso destra. Credo che questa cosa sia dovuta alla proiezione nella quale ho settato zup a 1. Per cambiare l'orientamento ho quindi pensato di usare la funzione d3d_transform_ecc ma mi posiziona il modello da un'altra parte che non ho ancora capito. Leggendo la speigazione, c'è scritto che viene ruotato rispetto al "world", ora non so bene cosa significhi, so solo che applicandogli una rotazione a x, y o z, il modello se ne va a quel paese. Comunque diciamo che è un mezzo problema visto che posso ruotarlo anche in blender raggirando il problema.

Il secondo problema è che il modello è tutto nero... anche se gli applico una texture si vede sempre tutto nero, cosa mi sfugge?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da Jak »

doom13 ha scritto:Quello meno importante è che il modello che importo non è orientato correttamente ma è ribaltato. Per fare una prova ho fatto un cono con la punta verso l'alto, quando lo visualizzo nel gioco la punta è rivolta verso destra. Credo che questa cosa sia dovuta alla proiezione nella quale ho settato zup a 1.
Il default di tutti i programmi esistenti usa l'asse Y per l'altezza. Se metti gli up a (0,1,0) risolvi il problema.
Chiaramente per via delle collisioni e limitazioni di GM è più comodo usare l'asse Z per l'altezza ma devi vedere un po tu. Altrimenti la soluzione è appunto ruotare il modello come stai facendo.
doom13 ha scritto:Il secondo problema è che il modello è tutto nero... anche se gli applico una texture si vede sempre tutto nero, cosa mi sfugge?

Codice: Seleziona tutto

draw_set_color(c_white);
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

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Jak ha scritto:
doom13 ha scritto:Quello meno importante è che il modello che importo non è orientato correttamente ma è ribaltato. Per fare una prova ho fatto un cono con la punta verso l'alto, quando lo visualizzo nel gioco la punta è rivolta verso destra. Credo che questa cosa sia dovuta alla proiezione nella quale ho settato zup a 1.
Il default di tutti i programmi esistenti usa l'asse Y per l'altezza. Se metti gli up a (0,1,0) risolvi il problema.
Chiaramente per via delle collisioni e limitazioni di GM è più comodo usare l'asse Z per l'altezza ma devi vedere un po tu. Altrimenti la soluzione è appunto ruotare il modello come stai facendo.
doom13 ha scritto:Il secondo problema è che il modello è tutto nero... anche se gli applico una texture si vede sempre tutto nero, cosa mi sfugge?

Codice: Seleziona tutto

draw_set_color(c_white);
Grazie!

Edit:
Senti Jak, come avevo già detto, questo gioco lo vorrei esportare per Android ma sinceramente non ho capito come devo fare per evitare l'utilizzo necessario della dll, potresti spiegarmi come dovrei fare? In che modo una volta importato il modello lo tengo memorizzato nel progetto senza aver ogni volta bisogno di caricarlo? :cappa:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Mi sembrava tutto troppo facile...
Prima di tutto usando draw_set_color(c_white) i modelli rimangono neri :confuso: e non so proprio quale sia il problema.
Altra cosa, ho fatto un modello composto da una sfera e 3/4 cilindri ma importandolo mi disegna solo la sfera :(
Credo che bisogni rendere i cilindri e la sfera un unico modello ma comunque non so come fare :oops:
Infine rimane il problema che ho scritto nell'edit sopra
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da Jak »

doom13 ha scritto:Senti Jak, come avevo già detto, questo gioco lo vorrei esportare per Android ma sinceramente non ho capito come devo fare per evitare l'utilizzo necessario della dll, potresti spiegarmi come dovrei fare? In che modo una volta importato il modello lo tengo memorizzato nel progetto senza aver ogni volta bisogno di caricarlo? :cappa:
E' meglio se lasci perdere finchè non impari bene il 3D. Anche perchè su android avrai già tutto abbastanza lento di suo, se non sai perfettamente tutto sul 3D è finita.
doom13 ha scritto:Prima di tutto usando draw_set_color(c_white) i modelli rimangono neri :confuso: e non so proprio quale sia il problema.
Neanche io :lol:
Dalle poche informazioni è impossibile sapere dove hai sbagliato.
doom13 ha scritto:Altra cosa, ho fatto un modello composto da una sfera e 3/4 cilindri ma importandolo mi disegna solo la sfera :(
Credo che bisogni rendere i cilindri e la sfera un unico modello ma comunque non so come fare :oops:
Come avevo detto un po ovunque (nel topic, all'interno dello script, nei commenti dell'oggetto di esempio che usa quella funzione, ecc) lo script "faccio tutto io" importa un solo modello del file, per importarli tutti bisogna unirli oppure importarli tutti quanti uno alla volta (guarda gli argomenti dello script, uno è l'indice del modello contenuto in quel file, basta importarli tutti quanti) oppure usare gli script interni ma è chiaramente sconsigliato se sai poco di 3D, anche perchè ancora non ho fatto la documentazione.
Per il come unirli... imparati bene il programma di modellazione che usi.
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

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Importare modelli

Messaggio da doom13 »

Jak ha scritto:
doom13 ha scritto:Senti Jak, come avevo già detto, questo gioco lo vorrei esportare per Android ma sinceramente non ho capito come devo fare per evitare l'utilizzo necessario della dll, potresti spiegarmi come dovrei fare? In che modo una volta importato il modello lo tengo memorizzato nel progetto senza aver ogni volta bisogno di caricarlo? :cappa:
E' meglio se lasci perdere finchè non impari bene il 3D. Anche perchè su android avrai già tutto abbastanza lento di suo, se non sai perfettamente tutto sul 3D è finita.
:( è troppo complicato? Dovrei tipo salvare le coordinate di tutti i vertici o cose del genere?
Jak ha scritto:
doom13 ha scritto:Prima di tutto usando draw_set_color(c_white) i modelli rimangono neri :confuso: e non so proprio quale sia il problema.
Neanche io :lol:
Dalle poche informazioni è impossibile sapere dove hai sbagliato.
Appena posso carico tutto il progetto, tanto è poca robba
Jak ha scritto:
doom13 ha scritto:Altra cosa, ho fatto un modello composto da una sfera e 3/4 cilindri ma importandolo mi disegna solo la sfera :(
Credo che bisogni rendere i cilindri e la sfera un unico modello ma comunque non so come fare :oops:
Come avevo detto un po ovunque (nel topic, all'interno dello script, nei commenti dell'oggetto di esempio che usa quella funzione, ecc) lo script "faccio tutto io" importa un solo modello del file, per importarli tutti bisogna unirli oppure importarli tutti quanti uno alla volta (guarda gli argomenti dello script, uno è l'indice del modello contenuto in quel file, basta importarli tutti quanti) oppure usare gli script interni ma è chiaramente sconsigliato se sai poco di 3D, anche perchè ancora non ho fatto la documentazione.
Per il come unirli... imparati bene il programma di modellazione che usi.
Uso blender e si capisce ben poco :?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

KingPaic
Newbie
Messaggi: 27
Iscritto il: 03/07/2014, 16:22
Specialità: programmatore
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Importare modelli

Messaggio da KingPaic »

Ho una chicca per tutti per i file OBJ, girovagano per il web ho trovato una UDF SENZA DLL che converte da sola i .obj in d3d!
La Funzione è questa:
Spoiler

Codice: Seleziona tutto

filename=argument0%3B
flipnormals = 1;
if (argument1>0) flipnormals=-1;
vertex_list1=ds_list_create();ds_list_clear(vertex_list1);ds_list_add(vertex_list1,0);
vertex_list2=ds_list_create();ds_list_clear(vertex_list2);ds_list_add(vertex_list2,0);
vertex_list3=ds_list_create();ds_list_clear(vertex_list3);ds_list_add(vertex_list3,0);
normal_list1=ds_list_create();ds_list_clear(normal_list1);ds_list_add(normal_list1,0);
normal_list2=ds_list_create();ds_list_clear(normal_list2);ds_list_add(normal_list2,0);
normal_list3=ds_list_create();ds_list_clear(normal_list3);ds_list_add(normal_list3,0);
texture_list1=ds_list_create();ds_list_clear(texture_list1);ds_list_add(texture_list1,0);
texture_list2=ds_list_create();ds_list_clear(texture_list2);ds_list_add(texture_list2,0);
faces_list=ds_list_create();ds_list_clear(faces_list);
fp=file_text_open_read(filename);
 
for (i=0;file_text_eof(fp)==false;i+=1) {
 
    row=file_text_read_string(fp);row=string_replace_all(row,"  "," ");
     
    if (string_char_at(row,1)=="v" && string_char_at(row,2)==" ") {
        row=string_delete(row,1,string_pos(" ",row));
        vx=real(string_copy(row,1,string_pos(" ",row)));
        row=string_delete(row,1,string_pos(" ",row));
        vy=real(string_copy(row,1,string_pos(" ",row)));
        row=string_delete(row,1,string_pos(" ",row));
        vz=real(string_copy(row,1,string_length(row)));
        ds_list_add(vertex_list1,vx);
        ds_list_add(vertex_list2,vy);
        ds_list_add(vertex_list3,vz);
    }
     
    if (string_char_at(row,1)=="v" && string_char_at(row,2)=="n") {
        row=string_delete(row,1,string_pos(" ",row));
        nx=real(string_copy(row,1,string_pos(" ",row)));
        row=string_delete(row,1,string_pos(" ",row));
        ny=real(string_copy(row,1,string_pos(" ",row)));
        row=string_delete(row,1,string_pos(" ",row));
        nz=real(string_copy(row,1,string_length(row)));
        ds_list_add(normal_list1,nx);
        ds_list_add(normal_list2,ny);
        ds_list_add(normal_list3,nz);
    }
     
    if (string_char_at(row,1)=="v" && string_char_at(row,2)=="t") {
        row=string_delete(row,1,string_pos(" ",row));
        tx=real(string_copy(row,1,string_pos(" ",row)));
        row=string_delete(row,1,string_pos(" ",row));
        ty=real(string_copy(row,1,string_length(row)));
        ds_list_add(texture_list1,tx);
        ds_list_add(texture_list2,ty);
    }
     
    if (string_char_at(row,1)=="f" && string_char_at(row,2)==" ") {
        row=string_replace_all(row,"  "," ");
        row=string_delete(row,1,string_pos(" ",row));
        if (string_char_at(row,string_length(row))==" ") row=string_copy(row,0,string_length(row)-1);
        face_num=string_count(" ",row);
        face_division=1;
        temp_faces[0]=0;
         
        for (fc=0;fc<face_num;fc+=1) {
            f=string_copy(row,1,string_pos(" ",row));
            row=string_delete(row,1,string_pos(" ",row));
            temp_faces[face_division]=f;
            face_division+=1;
        }
             
        f=string_copy(row,1,string_length(row));temp_faces[face_division]=f;
        if (face_division==3) {
            f1=temp_faces[2];
            f2=temp_faces[3];
            f3=temp_faces[1];
            ds_list_add(faces_list,f1);
            ds_list_add(faces_list,f2);
            ds_list_add(faces_list,f3);
        } else {
            f1=temp_faces[2];
            f2=temp_faces[3];
            f3=temp_faces[1];
            ds_list_add(faces_list,f1);
            ds_list_add(faces_list,f2);
            ds_list_add(faces_list,f3);
            for (t=0;t<face_division-3;t+=1) {
                f1=temp_faces[4+t];
                f2=temp_faces[1];
                f3=temp_faces[3+t];
                ds_list_add(faces_list,f1);
                ds_list_add(faces_list,f2);
                ds_list_add(faces_list,f3);
            }
        }
    } 
     
    file_text_readln(fp);          
}
file_text_close(fp);
 
tm=d3d_model_create();
tsn=0;
d3d_model_primitive_begin(tm,pr_trianglelist);       
 
for (fc=0;fc<ds_list_size(faces_list);fc+=1) {
 
    sub_face=ds_list_find_value(faces_list,fc);
     
    if (string_count("/",sub_face)==0) {
        f_index=sub_face;
        t_index=-1;
        n_index=-1;
    }
     
    if (string_count("/",sub_face)==1) {
        f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
        sub_face=string_delete(sub_face,1,string_pos("/",sub_face));
        t_index=string_copy(sub_face,1,string_length(sub_face));
        n_index=-1;
    }
     
    if (string_count("/",sub_face)==2 && string_count("//",sub_face)==0) {
        f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
        sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
        t_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
        sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
        n_index=string_copy(sub_face,1,string_length(sub_face));
    }
     
    if (string_count("/",sub_face)==2 && string_count("//",sub_face)==1) {
        sub_face=string_replace(sub_face,"//","/");
        f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
        sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
        t_index=-1;
        n_index=string_copy(sub_face,1,string_length(sub_face));
    }
     
    vx=ds_list_find_value(vertex_list1,floor(real(f_index)));
    vy=ds_list_find_value(vertex_list2,floor(real(f_index)));
    vz=ds_list_find_value(vertex_list3,floor(real(f_index)));
     
    if (floor(real(n_index))!=-1 && ds_list_size(normal_list1)>=1) {
        nx=flipnormals*ds_list_find_value(normal_list1,floor(real(n_index)));
        ny=flipnormals*ds_list_find_value(normal_list2,floor(real(n_index)));
        nz=flipnormals*ds_list_find_value(normal_list3,floor(real(n_index)));
    } else {
        nx=0;
        ny=0;
        nz=0;
    }
     
    if (floor(real(t_index))!=-1 && ds_list_size(texture_list1)>=1) {
        tx=ds_list_find_value(texture_list1,floor(real(t_index)));
        ty=ds_list_find_value(texture_list2,floor(real(t_index)));
    } else {
        tx=0;
        ty=0;
    }
     
    d3d_model_vertex_normal_texture(tm,vx,vy,vz,nx,ny,nz,tx,ty);
     
    tsn+=1;
    if (tsn==999) {
        tsn=0;
        d3d_model_primitive_end(tm);
        d3d_model_primitive_begin(tm,pr_trianglelist);
    }       
}
 
d3d_model_primitive_end(tm);
return tm;

Per usarla basta scriverla poi chiamarla:

Codice: Seleziona tutto

model = ObjLoader(working_directory + "\B2Model.obj",0); //carica il modello dal file .obj
d3d_model_draw(model,x,y,0,-1); //disegna il modello.

Funziona ma attenti alle texture, per avere un'anteprima cercate su google un GMK obj viewer, che vi fa vedere come verrebbe caricato con anche la texture, spero sia utile.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti