[U3D] Aiuto EDITOR 3D , posizionare oggetti.

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Rispondi
Avatar utente
Peppo95
GMI Advanced
Messaggi: 1613
Iscritto il: 05/11/2008, 19:10
Specialità: C Sharp - GML - C
Contatta:

[U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Peppo95 »

Ragazzi è un po' che non vi sento, mi siete mancati :')

Comunque sia: dopo svariate riflessioni ho concluso che l'unico modo di fare un editor decente come serve a me (Per un mio fantomatico gioco in U3D) sia quello di fare un editor in-game (in sostanza come fosse un sandbox)
Ma ho bisogno di una mano:

Come si fa in U3D a ricevere la posizione X Y e Z del mouse nello spazio tridimensionale? (Posso "volare" nell'editor ovviamente)
Come posso fare in modo che se clicco su un modello (o oggetto active di gioco) possa modificarne le proprieta? (In sostanza ho bisogno di un codice che mi restituisca l'ID dell'istanza selezionata per ruotarla ecc..)

poi basta credo.. per lo script di salvataggio del livello non dovrebbe essere COSI' DIFFICILE ... mi sono reso conto che non è difficile creare un'engine di un gioco 3D .. il difficile sono creare i livelli cavolo! :?


P.S esiste un modo per avere un'interfaccia Windows-style in GM? Mi servirebbero delle combobox o cmq delle tab da cui selezionare gli oggetti per l'editor...


GRAZIE GRAZIE GRAZIE! :D
Solite liste mie:
1) QUESTO POST NON E' FLAME


Chi lo riterrà tale verrà aspirato da un calamaro gigante.Esattamente questa notte... Muhahaha.

Immagine
Immagine

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Tizzio »

per l'hud windows style guarda qua :arrow: http://gmc.yoyogames.com/index.php?showtopic=367834

Avatar utente
Peppo95
GMI Advanced
Messaggi: 1613
Iscritto il: 05/11/2008, 19:10
Specialità: C Sharp - GML - C
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Peppo95 »

Wooow spettacolare! :rockrock:

Grazie! ;)
Solite liste mie:
1) QUESTO POST NON E' FLAME


Chi lo riterrà tale verrà aspirato da un calamaro gigante.Esattamente questa notte... Muhahaha.

Immagine
Immagine

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da civic71 »

Come si fa in U3D a ricevere la posizione X Y e Z
La posizione del mouse è sempre in 2 dimensioni quindi x e y ... la z è ipoteticamente calcolabile dalla z della camera.... anche se poi è relativo al tipo di visualizzazione se dall' alto o dal basso .
In sostanza ho bisogno di un codice che mi restituisca l'ID dell'istanza selezionata per ruotarla ecc.
Per cercare l'instance presente nel mio editor fatto per un gioco in U3D feci un codice non proprio bello ... ma all'epoca quelle erano le mie conoscenze . Si poteva selezionare un oggetto tramite le frecce direzionali UP e Down . Una volta selezionato esso veniva evidenziato di colore verde.


Ti riporto questo mio codice che però è relativo al mio gioco e quindi lo dovresti capire ed adattare al tuo gioco :


se premo UP
Spoiler

Codice: Seleziona tutto

if ! instance_exists(Robot){
                             if otherID=0{otherID=100000;}//105302;
                             otherID+=1;
                             if otherID>=500000{otherID=100000;}



                             with(all){     if(!persistent)
                                            and (u3d_type!=0)
                                            and (object_index!=obj_widget)
                                            and (object_index!=obj_OpenCloseWidgets)
                                            and (object_index!=obj_Objecttivi)
                                            and (object_index!=light_directional)
                                            and (object_index!=light_spot)
                                            and (object_index!=light_point)
                                            //2D
                                            and (object_index!=obj_pianta)
                                            and (object_index!=obj_albero)
                                            and (object_index!=obj_albero_Xtreme)
                                            and (object_index!=obj_pianticella)
                                            and (object_index!=obj_palma)
                                            and (object_index!=obj_pino)
                                            and (object_index!=obj_cartello_pubblicitario)
                                            { ApplyCelShading(0,0,0,0,255);Step();}
                                      }
         
                             scr_SearchID();
}
Se premo Down :
Spoiler

Codice: Seleziona tutto

if ! instance_exists(Robot){

                             if otherID=0{otherID=100000;}
                             otherID-=1;
                             if otherID<=100000{otherID=500000;}


                             with(all){     if(!persistent)
                                            and (u3d_type!=0)
                                            and (object_index!=obj_widget)
                                            and (object_index!=obj_OpenCloseWidgets)
                                            and (object_index!=obj_Objecttivi)
                                            and (object_index!=light_directional)
                                            and (object_index!=light_spot)
                                            and (object_index!=light_point)
                                            //2D
                                            and (object_index!=obj_pianta)
                                            and (object_index!=obj_albero)
                                            and (object_index!=obj_albero_Xtreme)
                                            and (object_index!=obj_pianticella)
                                            and (object_index!=obj_palma)
                                            and (object_index!=obj_pino)
                                            and (object_index!=obj_cartello_pubblicitario)
                                            { ApplyCelShading(0,0,0,0,255);Step();}
                                      }

                             scr_SearchID();
}               

I codici sopra richiamano lo script scr_SearchID :
Spoiler

Codice: Seleziona tutto

if keyboard_lastkey=vk_pageup{ for (i=otherID; (i<=500000 and not instance_exists(i)); i+=1){ otherID=i;}}
if keyboard_lastkey=vk_pagedown{ for (i=otherID; (i>=100000 and not instance_exists(i)); i-=1){ otherID=i;}}

if object_get_name(otherID.object_index)!=string('control'){

                      with(otherID){  if (object_index=obj_Funghetto)
                                      or (object_index=obj_monetina)
                                      or (object_index=obj_sfavillotto)
                                      or (object_index=obj_stella)
                                      or (object_index=obj_Bandiera)
                                      or (object_index=obj_cartello_pubblicitario)
                                      or (object_index=obj_piano_640)
                                      or (object_index=obj_piano64)
                                      or (object_index=obj_rullo)
                                      or (object_index=obj_tubo)
                                      or (object_index=obj_Tubo_Red)
                                      or (object_index=obj_rotante)
                                      or (object_index=obj_cubetto)
                                      or (object_index=obj_muretto)
                                      or (object_index=obj_blocco)
                                      or (object_index=obj_altalena)
                                      //obj_Freccia

                                      or (object_index=obj_collina)
                                      or (object_index=obj_nuvola)
                                      or (object_index=obj_montagna)
                                      or (object_index=obj_vulcano)
                                      or (object_index=obj_albero)
                                      or (object_index=obj_pianta)
                                      or (object_index=obj_pianticella)
                                      or (object_index=obj_palma)
                                      or (object_index=obj_pino)
                                      or (object_index=obj_albero_Xtreme)
                                      or (object_index=obj_LAVA)
                                      or (object_index=obj_MARE)                                      
                                      or (object_index=obj_ghiacciolo)

                                      or (object_index=obj_fungo_bad)
                                      or (object_index=obj_carnivora)
                                      //or (object_index=obj_fiamma)
                                      or (object_index=obj_PolipoBianco)
                                      //or (object_index=obj_missile)
                                      
                                      { sound_play(snd_moneta);
                                      
                                        if (x>400)and(x<4600){camera.x=x;}
                                        else{  if (x<400){camera.x=400;}else{camera.x=4600;}}

                                        scr_Green_OtherID();



                                          }else{ // per else  intendo object_widget e particelle
                                                 with(obj_Objecttivi){
                                                                      if (keyboard_lastkey=vk_pageup)  { if (otherID<500000){otherID+=1;}else{otherID=100000;}}
                                                                      if (keyboard_lastkey=vk_pagedown){ if (otherID>100000){otherID-=1;}else{otherID=500000;}}
                                                                      scr_SearchID();
                                                                     }
                                               }

                                                                                                                
                                   }
                                   
                                   
                                   
                                   
                                   
}else{  if (keyboard_lastkey=vk_pageup)  { if (otherID<500000){otherID+=1;}else{otherID=100000;}}
        if (keyboard_lastkey=vk_pagedown){ if (otherID>100000){otherID-=1;}else{otherID=500000;}}
        scr_SearchID();
     }                                   

Step
Spoiler

Codice: Seleziona tutto

//seleziona id di un object se non esiste Robot


if !instance_exists(Robot){

with(all){   if(!persistent)and (u3d_type!=0)
             and (place_meeting(x,y,obj_Objecttivi))
             and (object_index!=obj_widget)
             and (object_index!=obj_OpenCloseWidgets)
             and (object_index!=light_directional)
             and (object_index!=light_spot)
             and (object_index!=light_point)   
             {with(other){scr_OtherID();}}
          }


}

lo sciprt scr_Green_OtherID :
Spoiler

Codice: Seleziona tutto

switch  object_index { 
case obj_Funghetto :
case obj_monetina :
case obj_Bandiera :
case obj_cartello_pubblicitario:
case obj_piano_640:
case obj_piano64:
case obj_rullo:
case obj_tubo:
case obj_Tubo_Red:
case obj_rotante:
case obj_cubetto:
case obj_muretto:
case obj_blocco:
case obj_altalena:
case obj_collina:
case obj_nuvola:
case obj_montagna:
case obj_vulcano:                                                               
case obj_LAVA:
case obj_MARE:
case obj_ghiacciolo:
case obj_fungo_bad:
case obj_carnivora:                                                               
ApplyCelShading(2,255,255,255,255);Step(); break;
 } 
lo script OtherID :
Spoiler

Codice: Seleziona tutto

if (z>other.z-16)and(z+16<other.z+36)and(ne_muovo_solo_uno=false){ 
 //Se clicco
 if (click=0){ click=1;alarm[0]=50;
               if(otherID!=other.id)
               and MouseCheckButton(mb_right)
               and (instance_number(obj_widget)=6){otherID=other.id;
                                                    with(all){ if(!persistent)and (u3d_type!=0)
                                                               and (object_index!=obj_widget)
                                                               and (object_index!=obj_OpenCloseWidgets)
                                                               and (object_index!=obj_Objecttivi)
                                                               and (object_index!=light_directional)
                                                               and (object_index!=light_spot)
                                                               and (object_index!=light_point)
                                                               //2D
                                                               and (object_index!=obj_sfavillotto)
                                                               and (object_index!=obj_PolipoBianco)
                                                               and (object_index!=obj_pianta)
                                                               and (object_index!=obj_albero)
                                                               and (object_index!=obj_albero_Xtreme)
                                                               and (object_index!=obj_pianticella)
                                                               and (object_index!=obj_palma)
                                                               and (object_index!=obj_pino)
                                                               and (object_index!=obj_cartello_pubblicitario)
                                                               {ApplyCelShading(0,0,0,0,255);Step();
                                                                if id=obj_Objecttivi.otherID{ApplyCelShading(2,255,255,255,255);Step();}
                                                               }
                                                             }
                                                   sound_play(snd_moneta);
                                                  }
            }
}                     


Avatar utente
Peppo95
GMI Advanced
Messaggi: 1613
Iscritto il: 05/11/2008, 19:10
Specialità: C Sharp - GML - C
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Peppo95 »

Civic, che la posizione x y z era calcolabile ci ero arrivato :lol: è proprio quello il problema, non so i codici con cui calcolarle.. so che esiste una roba del tipo RAY INTERSECTION una cosa del genere ma non riesco a capire come usarla, cioè dovrei calcolarmi non dove punto il mouse, ma siccome è in game l'editor, devo calcolarmi l'x y e z NEL PUNTO di CONTATTO tra una ipotetica linea retta che parte da dove guarda il player, e tra il primo oggetto che incontra.. :fapensare:
Solite liste mie:
1) QUESTO POST NON E' FLAME


Chi lo riterrà tale verrà aspirato da un calamaro gigante.Esattamente questa notte... Muhahaha.

Immagine
Immagine

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

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Jak »

Cè una funzione che restituisce il vettore/direzione in base alla posizione del mouse sullo schermo.
Non ricordo come si chiama fatto sta che puoi usare quel vettore con il ray tracing.
Il ray tracing non è difficile. Purtroppo ho buttato via tempo fa tutti i miei vecchi esperimenti con i quali potevo darti una mano :(
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
Peppo95
GMI Advanced
Messaggi: 1613
Iscritto il: 05/11/2008, 19:10
Specialità: C Sharp - GML - C
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da Peppo95 »

okk, comunque non c'è una guida veramente completa? Quella di civic l'ho gia letta ma non spiega le funzioni avanzate.. C'è un guida che spiega magari con esempi scaricabili, ogni codice? Fosse in italiano sarebbe il TOP :fapensare:
Solite liste mie:
1) QUESTO POST NON E' FLAME


Chi lo riterrà tale verrà aspirato da un calamaro gigante.Esattamente questa notte... Muhahaha.

Immagine
Immagine

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Aiuto EDITOR 3D , posizionare oggetti.

Messaggio da fra3point »

Allora.. Forse posso aiutarti io anche se molto in ritardo.. Avevo fatto questi script per un simulatore di coordinate terrestri.. Il primo script assegna alle variabili point_x, point_y e point_z le coordinate 3D del punto d'intersezione tra il raggio rappresentato dal mouse e l'oggetto che chiama lo script. Il secondo script (che è chiamato dal primo) serve a controllare lo stato del mouse (no, non puoi usare le funzioni built-in di GM se non quelle "direct", cosa che fa proprio questo script.. Dai un'occhiata al tutto, dovrebbero funzionare, anche se ho riadattato qualcosa ora..

[codescript=GetMouseIntersectionPoint]// GetMouseIntersectionPoint(id);

var dist,longi,lati,mousePos;

mousePos=ScreenCoordToVector(-1,mouse_x,mouse_y,camera.number);
longi=CalculateVectorLongitude(mousePos);
lati=CalculateVectorLatitude(mousePos);
dist=CheckRayIntersection(argument0,camera.x,camera.y,camera.z+camera.height,longi,lati,all);
NormalizeVector(mousePos);
CalculateVectorScalarProduct(mousePos,mousePos,dist);
if dist!=100000{ //100000 è il valore ritorato se non c'è intersezione
CheckMouse();
if left_pressed{
point_x=GetVector(mousePos,1)+camera.x-id.x;
point_y=GetVector(mousePos,2)+camera.y-id.y;
point_z=GetVector(mousePos,3)+camera.z-id.z;
}
}
ReleaseVector(mousePos);[/codescript]


[codescript=CheckMouse]//Metti questo script in Begin Step.
//Assicurati di inizializzare le variabili left_down e right_down a false nell'evento Create dell'oggetto che userai

var LMB,RMB;

LMB=keyboard_check_direct(mb_left);
RMB=keyboard_check_direct(mb_right);

left_pressed=false;
left_released=false;

if LMB
{
if !left_down {
left_down=true;
left_pressed=true;
}
} else {
if left_down {
left_down=false;
left_released=true;
}
}

right_pressed=false;
right_released=false;

if RMB
{
if !right_down {
right_down=true;
right_pressed=true;
}
} else {
if right_down
{
right_down=false;
right_released=true;
}
}[/codescript]
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti