d3d_draw_wall e normali

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Rispondi
Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

Per risparmiare texture sto drawnando un wall con il d3d utilizzando quando necessario l'immagine speculare
(esattamente come nel 2D per ottenere il fianco sinistro e destro di un personaggio per intenderci).
il codice è questo:

Codice: Seleziona tutto

       if (mirror_3d == -1) { d3d_set_culling(false); }
       d3d_draw_wall(x- (width/2)*global.camsin * mirror_3d,
                     y- (width/2)*global.camcos * mirror_3d,
                     //z+ (z_height/2)* global.camcos_v, //z_height included scale_3d
                     z1,
                     x+ (width/2)*global.camsin * mirror_3d,
                     y+ (width/2)*global.camcos * mirror_3d,
                     //z- (z_height/2)* global.camcos_v, //z_height included scale_3d
                     z2,
                     tex,1,1);                     
       d3d_set_culling(true);
mirror_3d quando vale uno inverte i due angoli del mio wall, creando l'effetto specchio.
come notate ho dovuto mettere il culling a false per risolvere il problema della normale (che è anch'essa invertita evidentemente).
Però ora ho aggiunto le luci... e purtroppo la normale invertita fa si che l'oggetto non sia illuminato, ma risulti puramente nero (solo quando il mirror è attivato ovviamente!).

Come faccio (senza intervenire sullo sprite della texture) ad ottenere questo effetto salva memoria (meno sprite!), e contemporaneamente a gestire la luce (e a questo punto anche scordarmi del culling).

Riassunto: voglio disegnare la texture con l'asse "x" speculare, ma senza cambiare il verso della normale...
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

Generalmente per specchiare lo sprite nel 3d si invertono le coordinate texture e non la forma. Non ho provato (ora che imposto la proiezione, mi rinfresco il d3d e tutto il resto...) ma prendiamo qualche considerazione. Molto probabilmente game maker per hrepeat e wrepeat usa semplicemente coordinate:
0,0 - 0,hrepeat - wrepeat,hrepeat - wrepeat,0 quindi se noi mettiamo -1 a wrepeat le coordinate cambiano conseguenzialmente ed inverte il senso della texture quindi si specchia, avevo scritto pure i calcoli ma poi ho visto che il post diventava palloso per una risposta ovvia.
Lascia quindi la geometria posizionata correttamente e metti -1 a wrepeat per invertire rispetto all'asse X della tex.
Probabilmente bisogna impostare la ripetizione della texture (texture_set_repeat(true) mi sembra).

PS: Se vuoi la spiegazione completa con immagini illustrative basta chiedere :lol:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

la tua proposta jak funziona molto bene, infatti posso eliminare la disattivazione del culling ed ottenere lo stesso effetto senza alterare le coordinate del wall, e fare una ripetizione orizzontale di "-1" invece di "+1", che come tu supponevi evidentemente funziona proprio con il concetto "inizia dalla fine e vai verso l'inizio" ;)

però non risolve il problema delle luci, che con questi ulteriori controlli mi sono accorto non c'entrare nulla con la stampa a "specchio".

infatti anche in oggetti più semplici che non prevedono mai la stampa a specchio (e quindi che non invertono mai la normale!) sono sempre e comunque totalmente neri.
Questo in qualunque posizione rispetto alle luci che ho definito.
Quindi il dubbio sulla stampa a specchio non c'entrava nulla...
Vabbè, ho tolto un disattiva-riattiva culling...

Qualche idea ddel perchè i muri siano scuri, mentre le entita block siano illuminate? (d3d_draw_wall e d3d_draw_block rispettivamente).

Screenshot esplicativo...
Immagine
Uploaded with ImageShack.us

Il martello colorato è stato disegnato come overlay (lo sto trascinando con il mouse dentro l'inventario), è quindi disegnato da un oggetto con depth minore (quindi l'ultimo che drawwa), dopo aver ridefinito la proiezione come ortogonale e disabilitati tutti gli effetti 3D (comprese le luci!)
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

Personalmente non ne ho idea.
Considerando che hai detto
BaronVsCorsar ha scritto:sono sempre e comunque totalmente neri.
Questo in qualunque posizione rispetto alle luci che ho definito.
Si direbbe che non è un problema di normali perchè se sbagliate in qualche strana posizione dovrebbero funzionare.
Come mai negli altri screen del gioco prima funzionava perfettamente invece?(forse non usavi le luci?)
L'unica cosa che mi viene in mente è che al disegno dei wall le luci non sono attivate e quindi disegni con il colore di default, il nero.
Altre spiegazioni per ora non mi vengono in mente :fapensare:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

Jak ha scritto: Come mai negli altri screen del gioco prima funzionava perfettamente invece?(forse non usavi le luci?)
esatto.
le luce le ho create quando non esistevano nè oggetti nè nemici.
adesso stavo ceercando di metterle a posto ed ho trovato questi problemi...

Tra l'altro anche il soffitto (disegnato come un floor rivolto verso il basso) mi da lo stesso problema, mentre il pavimento (floor tradizionale) non mi da problemi...

Boh...
mi sa che mi scordo il draw_wall e mi faccio una bella primitiva bidimensionale che fa la stessa cosa, ma di cui ho il controllo della normale!
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

BaronVsCorsar ha scritto:Tra l'altro anche il soffitto (disegnato come un floor rivolto verso il basso) mi da lo stesso problema, mentre il pavimento (floor tradizionale) non mi da problemi...
Bè le normali delle primitive dovrebbero essere regolate automaticamente da game maker.
Per disegnare correttamente il soffitto devi anche disegnarlo al contrario in modo da invertire le normali. Se hai un floor 0,0-1,1 per il soffitto allora defi impostarlo 1,1-0,0 così di invertire il senso su cui è disegnato.
Per quanto riguarda invece gli elementi dello scenario dobbiamo pure considerare che ci sarà sempre un lato con le normali sballate. A sto punto non saprebbe più semplice nonchè da l'effetto corretto disegnare i wall senza l'uso delle luci ma dandogli un colore usando point_distance con le luci? :fapensare:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

i draw_wall sono disegnati sempre rivolti verso la telecamera,
secondo il noto modello "alla doom", in cui i nemici e i decori sono "carton board" che guardano sempre la telecamera, e mostrano fino a 8 diverse figure in funzione di come ci ruoti attorno.
L'effetto finale non è malaccio, e non devi utilizzare modelli 3d, ma solo un pacco di sprite (8, o 5 se li puoi specchiare) sprite per ogni frame di animazione.

(8 è il numero tipico che si utilizza, ma per mostri a simmetri particolare se ne possono usare meno, e nulla vieta di usarne di più... anche se non l'ho mai visto fare).

il draW_wall in effetti non credo che abbia altri usi, perchè un wall visto a 90 gradi è di dimensione nulla, e sparisce a tutti gli effetti...

PS: il soffitto lo giro correttamente, come puoi vedere dagli screen con luce, il fatto è che con il buio invece non va...
Spero di risolvere con una bella primitiva. :amen:
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

BaronVsCorsar ha scritto:il soffitto lo giro correttamente, come puoi vedere dagli screen con luce, il fatto è che con il buio invece non va...
Sta frase non l'ho proprio capita :fapensare:
Magari rinfrescami la memoria linkando gli screen o il post esatti.

Per quanto riguarda il resto avevo perfettamente capito l'effetto alla doom che volevi fare ma con questo sistema le normali son problematiche. con le normali in una certa direzione quando l'oggetto è tra la luce e la telecamera si vede, quando è la luce a stare in mezzo invece viene completamente nero. Invertendo le normali otteniamo l'effetto esattamente opposto cioè illuminato solo ed esclusivamente quando la luce si trova in mezzo tra telecamera ed wall.
Indipendentemente dal fatto se risolverai il problema oppure no l'utilizzo delle luci non mi sembra adatto al tuo cazo(almeno per i billboard) e personalmente utilizzerei un point_distance per dargli manualmente(toglie la luce ed usi draw_set_color con make_color_hsv(0,0,quantità_di_luce) la luminosità in base alla distanza dalla luce così da avere sempre il colore corretto indipendentemente da come è direzionato il wall ed allo stesso tempo ti eviti tutto sto ambaradam con le normali.
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

il soffitto nell'immagine "buia" postata sopra è totalmente nero,
in questo topic puoi vedere il soffitto disegnato:
http://gmitalia.altervista.org/gmi_foru ... f=9&t=4726

sinceramente non capisco bene perchè i billboard non dovrebbero funzionare bene con le luci... allo stesso modo non dovrebbe funzionare con i bloc (alla fine è come se fossero 6 wall disegnati...).
cmq... io provo con le primitive ;)
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

BaronVsCorsar ha scritto:sinceramente non capisco bene perchè i billboard non dovrebbero funzionare bene con le luci... allo stesso modo non dovrebbe funzionare con i bloc (alla fine è come se fossero 6 wall disegnati...).
Si ma cè una bella differenza tra oggetti che stanno fermi ed oggetti in movimento. se tu schiacci un block facendolo diventare come un wall avrà lo stesso problema.
Uso delle immagini per illustrare meglio.
Prendiamo 3 elementi: camera, luce, una classica custodia per cd.(il primo oggetto quadrato che mi è venuto in mente)
In questa immagine prendiamo le facce più grandi del cd(dico cd per velocità). Una faccia è illuminata, l'altra no per ovvie ragioni(non è colpita dalla luce):
Immagine
Ora spostiamo l'oggetto dietro la luce rispetto alla camera, otteniamo l'effetto inverso cioè quella che prima era illuminata ora non lo è e viceversa
Immagine
Quindi ogni faccia non è dipendente solo dalla distanza dalla luce ma anche dall'inclinazione e la posizione della faccia stessa.
un wall non è altro che una faccia sola anzichè un'intera custodia per cd quindi in una data posizione si vedrà ben illuminata, nell'altra si vedrà completamente nera anche semplicemente spostandola di poche unità. Inoltre avvicinando grossi oggetti ad una luce otteniamo comunque un calo di visibilità.

E' chiaro che il soffitto ti si disegnava quando non usavi la luce(ah asp, forse parli del culling vero? allora forse hai ragione :hum: )

Altra motivazione è il fatto che usi un'unico soffitto enorme e come ben sai la luce è calcolata per vertice e non per pixel quindi se il soffitto è enorme è chiaro che non si illumina bene. Per quanto riguarda il pavimento invece non mi spiego come mai funzioni, forse usi vari oggetti pavimento o una directional light? :fapensare:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

no, pavimento e soffitto sono disegnati in un blocco unico, ma solo attorno al personaggio... dovrebbero comportarsi nello stesso modo... ma ci guardo dopo aver risolto il billboard.

per il wall hai ragione, ma come ti ho detto non è un oggetto. è un punto.
disegno il billboard in quel punto, e lo inclino in modo che mostri una faccia (sempre la stessa!) alla telecamera!
se la faccia ha le normali giuste, ed è colpita dalla luce, la luce viene riflessa verso la telecamera!

nei tuoi esempi, in un caso ho disegnato il fornte del cd vero la camera, nel caso dopo... anche!
e giustamente in un caso la mia faccia che riflette verso la camera non rifletterà nulla (perchhè non è colpita), e nel secondo caso sì. perchè è colpita.

sto solo impazzendo a ricalcolarmi le normali di ogni vertice
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

Mi sa che non hai capito molto sul funzionamento delle normali.
"La telecamera non influisce in alcun modo sulla luce" a meno che non parliamo di specular ed altri effetti non presenti in game maker.
La telecamera non fa altro che calcolare la matrice di proiezione per trasformare le coordinate nello spazio 3d in coordinate a schermo per disegnarle ma i calcoli della luce vengono usati usando il reale spazio 3d.
La luce di un triangolo(facciamo conto che siano normalizzate a dovere) è più intensa se è direzionato verso la luce, se non è direzionato verso la luce viene nero(o di colore della luce ambientale)
Immagine
In questo spazio 3d non importa affatto la posizione della telecamera, le sole cose che contano sono:
-posizione della luce(vabbè è ovvio)
-normale del vertice(per capire da che lato è direzionata la faccia)
-posizione del vertice(per capire, assieme alla posizione della luce, se la normale è direzionata verso la luce ed illuminare di conseguenza)
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

jak, tu dimentichi che il billboard l'ho disegnato SEMPRE perpendicolare alla direzione della telecamera. Quindi le sue normali devono essere PARALLELE alla direzione della telecamera (con direzione invertita) per il semplice fatto che le normali le voglio perpendicolari all'asse del billboard.
Per questo il calcolo delle normali sul mio billboard DEVONO essere dipendenti dalla telecamera, in quanto lo sono i billboard stessi!

per fare un paragone nel disegno che hai postato: le superfici che hai colorate non sono fisse nel mondo 3d, ma si piegano in modo da essere sempre visibili dalla telecamera. anche le normali devono essere modificate per essere allineate a questa "rotazione".

un altro modo per vedere il billboard nel modo in cui lo sto usando è immaginarsi un cilindro. Da ovunque lo si guardi dovrebbe avere una normale che ti punta contro. Io lo approssimo con un billboard rettangolare (che ruoto in funzione della telecamera), e quindi la sua unica normale voglio che guardi la telecamera.
Ritengo sia il metodo più credibile per usare i billboard con le luci (per lo meno con lo stile "attore rotante", non stile elemento piatto nel mondo 3d... a vole l'ho visto usare per fiori e piante, specialmente di sfondo).
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

Bè, allora non capisco che effetto vuoi ottenere :hum:
Sul fatto delle normali hai ragione tu ma non lo vedo bene in un gioco come il tuo proprio per problemi di questo tipo(se guardi una luce ed un'oggetto si trova tra te e la luce risulterà nero).
Game maker per quanto ne so aggiusta da solo le normali delle primitive(PS: le normali si trasformano automaticamente usando le trasformazioni quindi ruotando tramite d3d e non manualmente ottieni lo stesso risultato, forse pure più veloce)

Nell'esempio del cilindro tu hai sempre una normale che ti punta contro ma la luce illumina sempre e solo certe facce(se non modifichiamo o trasformiamo il cilindro) e muovendo la telecamera non fai altro che vedere altre facce ma la luce resta sempre quella.

Magari visto che sei esperto doomista linkami qualche video dove si nota bene l'effetto luce che vorresti avere.
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

Jak ha scritto:Sul fatto delle normali hai ragione tu ma non lo vedo bene in un gioco come il tuo proprio per problemi di questo tipo(se guardi una luce ed un'oggetto si trova tra te e la luce risulterà nero).
bhè, è vero, ma non succede anche nella realtà? se io ho la luce esattamente dietro all'oggetto dovrei vedere l'oggetto totalmente nero. Se ha un po' di colore è dovuta alla luce riflessa dalle pareti che colpiscie pure lui... :fapensare:

Cmq non ho esempi, perchè quando ho visto utilizzare pesantemente il billboard non esistevano le luci dinamiche: semplicemente il mondo era diviso in "settori" (stanze), ed a ogni settore era associato un livello di luminosità.
Con un attento level design si ottenevano effetti verosimili.

Adesso provo a far gestire la rotazione con le trasformazioni, come dici tu dovrebbe gestire bene ANCHE le normali, non ci avevo pensato.
Continuo con le sperimentazioni (magari ad orari più lontani dalla mezzanotte, quando fare un po' di trigonometria è meno complicato :lol: ) .

Chissà se l'effetto finale sarà passabile... :confuso:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

:uppa:
dai miei test deduco che il d3d_draw_wall abbia la normale rivolta verso la faccia posteriore, quindi non si riesca ad avere la luce senza disattivare il culling... mah...

cmq sono passato alle primitive con tanto di triangoli.
per gli oggetti non c'è malaccio, ma non mi soddisfa il risultato.
sembra che gli oggetti appoggiati a terra siano ben illuminati, mentre quelli a mezz'aria no.

Ho anche pensato che un unico billboard non andasse bene, ma pure creandolo con un triangle fan composto da 8 triangoli, pur migliorando un po' la situazione non la rende verosimile.

non capisco tutti questi problemi sul billboard, quando con i blocchi mi va immediatamente "come si deve"... :fapensare:

vabbè, farò un altro paio di test domani, poi provo a postare il risultato.

Per la cronaca, ecco come ora creo il billboard con 8 triangoli:
z1,z,z2 sono il punto più alto, il punto centrale, e il punto più basso del billboard.
tx1 e tx2 permeetono di gestire l'effetto spcchio, e obj_party.looking è la direzione della telecamera.
Spoiler

Codice: Seleziona tutto

       d3d_transform_add_rotation_z(obj_party.looking);    
       d3d_transform_add_translation( x, y, 0);
       d3d_primitive_begin_texture(pr_trianglefan, tex);                   
       d3d_vertex_normal_texture(0,0,z,
                                 -1,0,z,
                                 0.5,0.5);
       d3d_vertex_normal_texture(0,-sprite_height/2,z1,
                                 -1,-sprite_height/2,z1,
                                 tx1,0);
       d3d_vertex_normal_texture(0,0,z1,
                                 -1,0,z1,
                                 0.5,0);
       d3d_vertex_normal_texture(0,+sprite_height/2,z1,
                                 -1,+sprite_height/2,z1,
                                 tx2,0);
       d3d_vertex_normal_texture(0,+sprite_height/2,z,
                                 -1,+sprite_height/2,z,
                                 tx2,0.5);
       d3d_vertex_normal_texture(0,+sprite_height/2,z2,
                                 -1,+sprite_height/2,z2,
                                 tx2,1);
       d3d_vertex_normal_texture(0,0,z2,
                                 -1,0,z2,
                                 0.5,1);
       d3d_vertex_normal_texture(0,-sprite_height/2,z2,
                                 -1,-sprite_height/2,z2,
                                 tx1,1);               
       d3d_vertex_normal_texture(0,-sprite_height/2,z,
                                 -1,-sprite_height/2,z,
                                 tx1,0.5);
       d3d_vertex_normal_texture(0,-sprite_height/2,z1,
                                 -1,-sprite_height/2,z1,
                                 tx1,0);                                 
       d3d_primitive_end();
       d3d_transform_set_identity();  
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

BaronVsCorsar ha scritto:sembra che gli oggetti appoggiati a terra siano ben illuminati, mentre quelli a mezz'aria no.
La luce dove sta? Se è appoggiata a terra è chiaro che se gli oggetti sono molto alti e vicini rispetto alla luce hanno un'inclinazione(rispetto alla luce) molto alta di conseguenza si illuminano poco.
BaronVsCorsar ha scritto:dai miei test deduco che il d3d_draw_wall abbia la normale rivolta verso la faccia posteriore, quindi non si riesca ad avere la luce senza disattivare il culling... mah...
Bè, almeno hai risolto, alla fine culling o non culling con i billboard devi sempre disegnare i triangoli quindi non avrai nessun vantaggio prestazionale usandolo, il culling più che altro è utile con oggetti "solidi".

Son scontento del fatto che game maker non permette di scegliere quale faccia cullare(quella davanti o quella dietro)spesso l'avrei trovata molto utile :evil:
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
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: d3d_draw_wall e normali

Messaggio da BaronVsCorsar »

ok, ho ottenuto un effetto decente.
Però anche con le primitive ho un effetto strano confrontandolo con i blocchi: se i vertici sono ad una zeta superiore a quella della light (definita come light puntuale) non si illuminano come mi sarei aspettato.
i blocchi non presentano questo problema.

alzando la z della luce l'effetto è decisamente migliore.
(ci sono 4 luci quasi sovrapposte in queste immagini, una per ogni pg)
Immagine
By baronvscorsar at 2011-09-14

Immagine
By baronvscorsar at 2011-09-14

i blocchi invece si comportano in maniera molto più verosimile, a prescindere dall'alzo della luce.
credo mi sfugga ancora qualche cosa. :fapensare:
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é?

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

Re: d3d_draw_wall e normali

Messaggio da Jak »

I blocchi son distanti ed ai bordi invece gli altri oggetti son più dinamici e cambiano facilmente posizione/inclinazione.
Per spiegare il problema ecco una bella immagine illustrativa:
Immagine
Spero ti "illumini" :lol:
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

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti