2010-02-18 5 views
5

Esiste un algoritmo per la proiezione di immagini su una superficie non piatta (deformata)?Esiste un algoritmo per la proiezione di immagini su una superficie non piana?

Non è deformato troppo. È una superficie davvero vetrosa, rivestita con carta da lucido di alta qualità e resistente. Ne ho un modello tridimensionale. Come posso strutturarlo con un proiettore? projection

Voglio scrivere un programma in C \ C++ \ C# per Windows, che sarebbe in grado di texturizzare qualsiasi superficie data da un modello tridimensionale usando un proiettore.

Ho bisogno di un algoritmo o di librerie open source contenenti algoritmi.

+5

Stai cercando di simulare come sarebbe se qualcuno indicasse un normale proiettore cinematografico su questa superficie? O stai cercando di regolare ciò che stai proiettando per cercare di annullare le deformazioni nella superficie? –

risposta

1

Non è affatto chiaro quale algoritmo utilizzerebbe una libreria di texturing standard, e probabilmente non è una vera proiezione, quindi se l'accuratezza è importante, è necessario farlo da soli (o fare qualche ricerca su quali specifici algoritmi sono usato per una determinata libreria).

L'algoritmo di base è semplice. Fondamentalmente hai solo bisogno di trovare dove la linea che emana dal tuo punto di proiezione interseca la tua superficie. Più in dettaglio:

  1. decidere sul proprio punto di proiezione
  2. Decidere su un mucchio di linee provenienti dal vostro punto di proiezione che vi darà la risoluzione è necessario sulla superficie deformata
  3. Determinare dove queste linee si intersecano la vostra superficie (il metodo esatto dipenderà dalla rappresentazione della superficie)
  4. Supponiamo che l'immagine piatta sia posizionata da qualche parte tra il punto di proiezione e la superficie deformata e trovi l'intersezione della linea con la superficie piana e assegni questo valore alla posizione sul deformato superficie.

D'altra parte, se la superficie è descritta matematicamente, potrebbe esserci una semplice equazione per questo, come sarebbe il caso, ad esempio, se si stesse mappando un piano su una sfera.

3

Sì, c'è un algoritmo. A meno che tu non voglia veramente implementare lo da solo, è probabilmente più semplice affidare a un'implementazione grafica 3D esistente il compito per te: sia OpenGL che DirectX ti consentono di applicare una texture alla superficie di un modello 3D. Le esercitazioni di NeHe includono un example dell'idea di base che utilizza OpenGL.

+0

Per aggiungere a questo, la chiamata OpenGL specifica è 'glTexGen (..., GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)'. –

0

Si chiama correzione della distorsione dell'immagine.

Problemi correlati