2010-03-02 15 views
5

Sono in procinto di sviluppare un motore di visualizzazione per l'azienda per cui lavoro. Creiamo decalcomanie per l'esterno degli aerei. Come tale vorremmo poter visualizzare le nostre decalcomanie sugli aerei che supportiamo.Decalcomanie fisicamente realistiche

Quindi, ecco il problema: nella vita reale, se stavo applicando le decalcomanie all'esterno di un aereo, pago una posizione di ancoraggio (diciamo al centro del lato sinistro della fusoliera) e poi risolvo da lì, consentendo alla decalcomania di avvolgere il corpo dell'aeromobile come meglio crede. Ora, naturalmente, stiamo mappando una "immagine" di decalcomania 2d su una superficie 3D, quindi ci sarà una certa distorsione mentre avvolge la pelle dell'aereo, ma questo è previsto e considerato nel progetto originale.

Sono bloccato cercando di riprodurre questo in 3d, tuttavia. Ho provato i seguenti metodi:

Mappatura UV - Unwrapping di un modello complesso come quello che abbiamo sarà estremamente difficile e sembra un po 'eccessivo. Il lato dell'aereo è vicino al piano, quindi sembra che un metodo più semplice di "decalcomania" funzionerebbe meglio

Mappatura cubo - Questo si avvicina, davvero molto vicino, tuttavia, poiché la decalcomania si abbassa sui volti di il lato dell'aereo, ad un certo punto le facce sulla parte superiore del modello inizieranno a mappare in cima alla mappa del cubo ... e poi otteniamo tosatura .....

Qualche idea? Qual è il modo migliore per farlo, non sono impostato su OpenGL vs DirectX a questo punto, quindi una risposta potrebbe funzionare correttamente.

+0

Ecco un ottimo articolo blog sui concetti alla base di questo: http://blog.wolfire.com/2009/06/how-to-project-decals/ – Ricket

risposta

5

Forse mi manca qualcosa di ovvio .. ma non puoi semplicemente usare projective texture mapping?.

Ovviamente lo svantaggio è la curvatura potenzialmente eccessiva poiché l'angolo tra il progetto e la superficie normale si avvicina a 90 gradi.

Oltre a ciò, perché l'UV scartoccia un piano così brutto? A condizione che la texturing del modello non sia deformata, sarebbe una soluzione piuttosto semplice. Microsoft fornisce uno strumento molto utile per scartare lo here.

+1

realtà che è praticamente quello che ho finito andando con. In Blender sono stato in grado di prototiparlo e funziona alla grande. È vero che c'è una deformazione nella parte superiore del modello, ma ho intenzione di tessere separatamente ogni lato del modello Il problema con lo scostamento UV è che è molto difficile farlo corrispondere esattamente alle decalcomanie del "mondo reale". Quando metti una decalcomania su un modello non prendi un coltello e lo tagli per abbinare le cuciture dello scarto UV ... o almeno non dovresti. Ad ogni modo, sembra che l'esempio sopra funzionerà alla grande. –

1

Si consiglia di utilizzare un cylindrical texture map. Purché non si stia tentando di mappare su un lato (es .: sull'ala, ecc.), Questo dovrebbe funzionare molto bene. Per una decalcomania sulla fusoliera, questo dovrebbe funzionare perfettamente ed essere molto semplice da implementare.

-1

Ho bisogno di almeno 15 caratteri e Ptex è solo 4. Ma è tutto ciò che devi sapere.

0

Credo che lo stato dell'arte di questo tipo di posizionamento di decalcomanie siano le coordinate ExpMap di Ryan Schmidt. Sono implicate alcune operazioni di mesh, ma non sono affatto difficili da implementare. Ecco un collegamento al documento SIGGRAPH: http://www.unknownroad.com/publications/ExpMapSIGGRAPH06.pdf

1

Quello che vuoi è una coordinata UV che corrisponda alle distanze geodetiche. Una distanza geodetica è fondamentalmente la distanza sulla superficie rispetto alla distanza euclidea che è la distanza più breve tra due punti (passando attraverso il modello se necessario). Una soluzione globale per creare una mappa geodetica è piuttosto complessa. Tuttavia, a livello locale può essere più facile ...

Dal momento che si sta applicando una decalcomania a una superficie che è più o meno piatta, o almeno un po 'curvo senza realmente gru e tacche, è possibile applicare una soluzione semplice. Non sono sicuro che funzionerà correttamente, ma tu hai già pensato tu stesso alla soluzione.

Si potrebbe semplicemente prendere un vertice nella mesh e A * o procedere da quel vertice a tutto il vertice vicino mentre si contano la distanza geodetica e si calcolano gli UV in questo modo. Non sarà completamente preciso ma potrebbe essere abbastanza buono nel tuo caso.

Esistono anche modi più efficaci per eseguire questa operazione, ad esempio un appiattimento utilizzando lo scaling multidimensionale. E se la topologia della superficie è più o meno simile a un piano, funzionerà molto bene.

http://en.wikipedia.org/wiki/Multidimensional_scaling

Problemi correlati