d3d_set_projectio_ext è molto tagliente

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
sonic_96
Membro
Messaggi: 176
Iscritto il: 29/07/2010, 19:26
Specialità: gfx e prog
Uso: GM:Studio 1.4 Pro
Località: Portici, Napoli
Contatta:

d3d_set_projectio_ext è molto tagliente

Messaggio da sonic_96 »

ciao ragazzi... in un mio progetto (platform a scorrimento laterale, per il momento semi 3d) la funzione "d3d_set_projection_ext" mi taglia tutti i modelli 3d...
Spoiler
Immagine
la funzione è settata così:
Spoiler

Codice: Seleziona tutto

var r;
r = view_wview[0]/view_hview;
d3d_set_projection_ext(obj_player.x,obj_player.y-6.9,500,obj_player.x,obj_player.y-7,190,0,0,1,60,r,-32,400);
come faccio a fare in modo che il modello 3d non venga tagliato??
p.s.: se modifico i valori 400 e -32 secondo un mio qualsiasi ragionamento logico, o a caso, la proiezione si sposta e non vedo più gli object.
zfar e znear funzionano meglio a: da 0 a -32 e da 400 a 510
qualcuno può darmi una mano??

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

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da Jak »

znear DEVE essere sempre maggiore di 0. Mettilo 0.1 che in genere va bene, evita di farlo troppo piccolo se possibile. Zfar idealmente puoi mettere quanto vuoi (precisione a parte), parti da un numero bello alto per evitare problemi durante i primi tentativi e poi riduci man mano. Nel tuo caso un bel 10k dovrebbe andar bene.
Suppongo che vuoi muoverti sugli assi x e y per andare bene e sviluppare il gioco come fosse 2D quindi:
xfrom, yfrom, zfrom sono la posizione della telecamera. Io metterei

Codice: Seleziona tutto

obj_player.x, obj_player.y, -500
xto,yto,zto è dove la camera punta, ossia il player

Codice: Seleziona tutto

obj_player.x, obj_player.y, 0
xup,yup,zup sono il vettore normale che indicano quale coordinata è l'altezza secondo te, siccome vuoi mantenere le coordinate di GM il tuo "alto" è la y quindi a meno che non vuoi fare angolazioni strane:

Codice: Seleziona tutto

0,1,0
angle e aspect sembra li hai capiti quindi vanno benone.
Per evitare di nascondere roba mentre lavori sulla proiezione disabilita il culling

Codice: Seleziona tutto

d3d_set_culling(false)
così hai meno problemi durante i test.

Se viene tutto suppergiù cambia xup,yup,zup in

Codice: Seleziona tutto

0,-1,0
Se hai problemi di inversione tra il vedere l'esterno o l'interno degli oggetti prova a invertire la posizione della camera sull'asse Z, xfrom, yfrom, zfrom

Codice: Seleziona tutto

obj_player.x, obj_player.y, 500
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
sonic_96
Membro
Messaggi: 176
Iscritto il: 29/07/2010, 19:26
Specialità: gfx e prog
Uso: GM:Studio 1.4 Pro
Località: Portici, Napoli
Contatta:

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da sonic_96 »

grazie Jak :D , i mdelli non vengono più tagliati ma i contorni dello sprite del pg (ovviamente trasparenti) prendono il colore dello sfondo e copre le texture di qualsiasi cosa c'è dietro.... stessa cosa se piazzo qualcosa un pò più avanti del pg sull'asse z (profondità)
dato che avevo già impostato la trasparenza (draw_set_alpha(0) per il pg, ovviamente ho provato anche altri valori ma il risultato non cambia, e draw_set_alpha(1) per gli alberelli perchè altrimenti non si vedono), come faccio a far diventare "trasparente i contorni"??
trasparente per modo di dire, perchè è trasparente, ma ogni tipo di texture dietro viene coperta tranne per lo sfondo
Spoiler
Immagine

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

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da Jak »

Questo problema è dovuto all'ordine in cui si disegnano gli oggetti e la gestione del 3D, senza spiegare il perchè ciò accata ti basta sapere che per gli oggetti trasparenti è indispensabile che gli oggetti più vicini alla telecamera siano disegnati dopo rispetto agli altri.
L'oggetto che resta dietro deve essere disegnato prima di quello che gli passa davanti.
La soluzione più semplice è quella di usare la depth per forzare l'ordine dei vari draw event.
Se usi già anche la coordinata Z per gestire l'ordine ti basterà fare depth = z
Evita di sovrapporre oggetti allo stesso livello di profondità se vuoi evitare problemi di questo tipo o peggio flickeramenti a raffica.
Occhio che se fai ad esempio cubi trasparenti o altri oggetti che risiedono contemporaneamente a più livelli di profondità la situazione si complica e dovrai fare particolare attenzione all'ordine.

Un'altra soluzione è quella di rinunciare al canale alpha e quindi fare una divisione netta tra pixel trasparenti e non, ma generalmente (come lo è nel tuo caso) è una soluzione drastica ed usata solo in determinati ambiti o stili grafici pixellosi, quindi la escluderei a prescindere. Tanto devi comunque fare considerazioni sulla profondità per decidere l'ordine degli oggetti.
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
sonic_96
Membro
Messaggi: 176
Iscritto il: 29/07/2010, 19:26
Specialità: gfx e prog
Uso: GM:Studio 1.4 Pro
Località: Portici, Napoli
Contatta:

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da sonic_96 »

la prima soluzione non funge, o almeno credo... il risultato è sempre lo stesso.
avevo impostato gli alberi come z = -16 ed il pg a z = 0, ma vengono sempre coperti dalla trasparenza dello sprite/texture

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

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da Jak »

Hai provato ad invertire il calcolo della depth tipo "depth = -z" ?
Oppure ad aggiungere un numero definito, anche non mi sembra magari ricordo male o con le nuove versioni viene disattivata nel 3D.
Chiedo giusto per conferma visto che non la menzioni, per "depth" intendo proprio una variabile interna di GM, cambiare semplicemente la Z è pressochè inutile.
https://docs.yoyogames.com/source/dadio ... depth.html
Ricordando inoltre che essendo una variabile relativa all'istanza se disegni più cose all'interno dello stesso oggetto devi gestire l'ordine a manina.
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
sonic_96
Membro
Messaggi: 176
Iscritto il: 29/07/2010, 19:26
Specialità: gfx e prog
Uso: GM:Studio 1.4 Pro
Località: Portici, Napoli
Contatta:

Re: d3d_set_projectio_ext è molto tagliente

Messaggio da sonic_96 »

si, ho già provato ad invertirla e, si cambio la variabile "depth"... ma non funziona, se inverto in "-z", logicamente si posizionano gli alberi davanti alla camera e il pg dietro di loro quindi, invece della trasparenza del pg che copre gli alberi, sono le trasparenze degli alberi a coprire il pg... però c'è una cosa che ricordo, quando non avevo settato bene "d3d_set_projection_ext" questo non succedeva... forse lo si può risolvere da lì??

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 143 ospiti