[Gex] - GeometryExt

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Rispondi
Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

[Gex] - GeometryExt

Messaggio da fra3point »

Buona sera a tutti! :cappa:

Ho sviluppato una .gex contenente alcune funzioni aggiuntive di disegno da aggiungere a quelle già integrate. Non ne sono molte e ho intenzione di farne delle altre in futuro.

Download gex
Download esempio .gm8


Ecco una lista delle funzioni presenti nella gex:

DrawEllipseExt(xc, yc, r_max, r_min, rot, n_seg, line_type);
  • Disegna un'ellisse formato da n_seg segmenti con centro (xc,yc) ruotata di rot gradi di raggio maggiore r_max e raggio minore r_min;
    -line_type è lo stile di disegno della figura e può essere 0, 1 o 2.
    • 0: solo contorno
      1: effetto "wireframe"
      2: riempito
    -n_seg rappresenta la precisione con la quale viene disegnata la figura e deve essere compresa tra 3 e 64

DrawArchimedeanSpiral(xc, yc, r, n_spire, forma);
  • Disegna una spirale di Archimede formata da n_spire spire, ognuna delle quali è formata da un numero di
    segmenti pari al parametro "forma". La spirale avrà come centro il punto (xc,yc) e raggio r.
    -forma rappresenta la precisione con la quale viene disegnata la figura e deve essere compresa tra 3 e 64.
    In pratica indica di quanti "lati" si compone la figura ogni 360 gradi (ogni spira). Se ad esempio la spirale deve essere
    a forma di triangolo il valore di forma sarà 3, se deve essere a forma di esagono deve essere 6, ecc.
Immagine

DrawArchimedeanSpiralExt(xc, yc, r, n_spire, forma, rot, larghezza_linea);
  • Disegna una spirale di Archimede formata da n_spire spire, ognuna delle quali è formata da un numero di
    segmenti pari al parametro "forma". La spirale avrà come centro il punto (xc,yc), raggio r e sarà ruotata di
    rot gradi.
    larghezza_linea specifica inoltre lo spessore della linea di disegno
    -forma rappresenta la precisione con la quale viene disegnata la figura e deve essere compresa tra 3 e 64.
    In pratica indica di quanti "lati" si compone la figura ogni 360 gradi (ogni spira). Se ad esempio la spirale deve essere
    a forma di triangolo il valore di forma sarà 3, se deve essere a forma di esagono deve essere 6, ecc.
DrawFermatSpiral(xc, yc, r, n_spire, forma);
  • Disegna una spirale di Fermat formata da n_spire spire, ognuna delle quali è formata da un numero di
    segmenti pari al parametro "forma". La spirale avrà come centro il punto (xc,yc) e raggio r.
    -forma rappresenta la precisione con la quale viene disegnata la figura e deve essere compresa tra 3 e 64.
    In pratica indica di quanti "lati" si compone la figura ogni 360 gradi (ogni spira). Se ad esempio la spirale deve essere
    a forma di triangolo il valore di forma sarà 3, se deve essere a forma di esagono deve essere 6, ecc.
Immagine

DrawFermatSpiralExt(xc, yc, r, n_spire, forma, rot, larghezza_linea);
  • Disegna una spirale di Fermat formata da n_spire spire, ognuna delle quali è formata da un numero di
    segmenti pari al parametro "forma". La spirale avrà come centro il punto (xc,yc), raggio r e sarà ruotata di
    rot gradi.
    -larghezza_linea specifica inoltre lo spessore del disegno
    -forma rappresenta la precisione con la quale viene disegnata la figura e deve essere compresa tra 3 e 64.
    In pratica indica di quanti "lati" si compone la figura ogni 360 gradi (ogni spira). Se ad esempio la spirale deve essere
    a forma di triangolo il valore di forma sarà 3, se deve essere a forma di esagono deve essere 6, ecc.
DrawStar(xc, yc, dimensioni, n_punte);
  • Disegna una stella di n_punte punte, centrata in (xc,yc).
    dimensioni rappresenta la distanza in pixel tra il centro e le punte.
    Il numero di punte deve essere >=3. Nel caso venga passato minore di 3 verrà automaticamente portato a 3.
DrawStarExt(xc, yc, r_centro, lunghezza_punte, n_punte, rot, rot_punte, line_type, line_width);
  • Disegna una stella di n_punte punte, centrata in (xc,yc) e ruotata di rot gradi.
    -r_centro rappresenta la distanza in pixel tra il centro e il poligono interno alla stella.
    -lunghezza_punte è invece la distanza tra il centro e le punte.
    Giocando con questi due valori la stella assumerà dimensioni e proporzioni diverse.
    -rot_punte indica invece l'angolazione dele punte
    -line_type è lo stile di disegno della figura e può essere 0, 1 o 2.
    0: solo contorno
    1: effetto "wireframe"
    2: riempito
    -line_width è lo spessore della linea del disegno nel caso in cui line_type sia uguale a 0.
    Il numero di punte deve essere >=3. Nel caso venga passato minore di 3 verrà automaticamente portato a 3.


Mi sono basato quasi interamente su formule matematiche relative a crechi ed ellissi. In particolare con la funzione DrawEllipseExt è possibile non solo disegnare un'ellisse ruotata (cosa che con la funzione di GM draw_ellipse non è possibile fare) ma anche creare molte altre forme geometriche poligonali come ad esempio triangoli, rettangoli, quadrati, esagoni, cerchi (se per cerchio intendiamo un insieme di segmenti), ecc..
draw_text(100,100,"fra3point");

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

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [Gex] - GeometryExt

Messaggio da BaronVsCorsar »

interessante esercizio di programmazione e veramente
ben "progettato" i nomi delle funzioni e i parametri...

ma un utilizzo pratico in un gioco lo vedo tosto :hum:

Potresti farci una "one week competition", come fare un gioco con la gex di fra3point :lol:

un appunto:
-line_type è lo stile di disegno della figura e può essere 0, 1 o 2.
0: solo contorno
1: effetto "wireframe"
2: riempito
se le gex lo permettono dovresti anche definire tre costanti con quei valori tipo:
dr_outline
dr_wireframe
dr_fill
o ancora meglio, spulciare se nelle costanti built in di GM non ci sono già tre valori utilizzabili/riciclabili.

No, non l'ho scaricato, ho dato il mio giudizio dalla bella presentazione delle tue funzioni (che spero sia anche inclusa nell'help della GEX :mrgreen: )
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

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

Re: [Gex] - GeometryExt

Messaggio da fra3point »

Grazie Baron! In effetti non ho inserito un help nella gex.. Questo perchè nell'esempio che ho postato già ho incluso il sorgente con le spiegazioni delle funzioni per ogni script.

Comunque, come ho accennato nel post precedente, ho intenzione di ampliare la gex con funzioni aggiuntive e a quel punto sicuramente inserirò un help html!

Per quanto riguarda le 3 costanti che mi hai consigliato, ebbene è possibile! In effetti è più intuitivo avere un riferimento del genere rispetto a valori numerici facilmente confondibili.. :sisisi:

Poi se vogliamo trovare un'utilità pratica, beh, a questo punto tutto deriva dalla fantasia di chi crea un gioco! Io personalmente ho creato un background animato fatto di spirali di varie dimensioni e vari colori alphati di un po'. Certo a livello di calcoli potrebbe risultare un po' più pesante di un normale background statico, ma il risultato è davvero carino!
Ora è notte quindi non mi metto a "screenshottare"! :lol:
Domani posterò qualche esempio di applicazione pratica, in particolare della funzione dell'ellisse che può generare un'infinità (quasi) di forme diverse senza usare una funzione diversa per ogni tipo di figura come in GM.. Alla fine è anche per questo che ho creato questa gex.

P.S.
Ovviamente, e concludo, se parliamo di funzioni matematiche che riguardano lo spazio, è facilmente possibile rendere parte di queste funzioni compatibili con il 3D. Il prossimo passo che farò sarà appunto questo, ma non conoscendo il d3d scriverò funzioni per U3D. Il sorgente sarà disponibile quindi chiunque volesse tradurre le future funzioni da U3D a d3d sarà libero di farlo! :)
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 3 ospiti