Panoramic projection
Biztosan láttál már, QuickTime VR filmet. Ez a QT-nak egy speciális
formája, ahol panoráma szerűen körbe lehet nézni. Szeretnék egy ilyet
csinálni, de nem találok sehol semmien használható leírást, az algoritmusról.
Az biztos, hogy semmien szuper titkos technológia nem kell hozá. Lehet
találni a neten egy tucat programot, ami hasonlóan működik. Még ilyen pár
kbyte-os (5-10kb) (ingyenes) java programkát is letöltöttem ami megcsinálja
ugyan ezt.
Addig jutottam magamtól, hogy van egy speciális lencsével felvett kép (elég
torz, de rajta van a 380 fokos látómező, egy hosszúkás képen), és ennek az
adott részletét valahogy vissza állítják "valódi" képpé. Valami olyasmi
lehet, hogy felhuzzák egy gömb, vagy egy henger palástjára, és a nézőpont
ezen belül van, mindíg egy darabot mutatva a képből. 
Elméletileg valami ilyesmi lehet, de gondolom nem számolnak "igazi" 3D
geometriával, csak egy pontot a képen, megfeleltetnek egy másikkal a
képernyőn.

Legacy/TLD

eppen most tanulgatom a JAVA-t, esetleg elkuldened ezt, vagy megadnad az URL-t? Valoszinuleg nem konstanssal kellene lepegetni a kepre masolagataskor, hanem szinusztabla szerint, a szeleken nagyobbakat (vizszintesen es fuggolegesen is) A leggyorsabb ha generalsz egy init rutinnal, egy transzformacios tablat, ami akkora, mint amekkor a keped es egy-egy erteke azt mondja-meg, hogy honan vedd a pixelt a texturabol (persze jobb lenne, ha meg interpolalnal is - de ezt egyelore hagyjuk!). Ez a tabla azert jo, mert 1. gyors a keprajzolo rutin, 2. ha korbe akarsz fordulni, akkor maradhat a tablazat, csak egy offset erteket kell hozzaadnod, ami odebb mutat a texturan. A tablazatott tapasztalati uton hangold be! Egy domboru lencset kell szimulalnod, igazabol csak a domburusagat kell megtalalnod. Amit leirtam az mind csak a sajat fantazmagoriam, de ki tudja, lehet, hogy megis kozelebb visz a megoldashoz... udv, TomCat/Abaddon
Sajna "eldobtam" a címeket, de egy-két jobbat tudok adni. Van egy hasonló profi dolog mint a Quick Time, IPIX-nek hívják, címe: http://www.ipix.com/ A JAVA-k között elég sok gyenge dolog volt, egyet azért megtartottam, ami ahoz képest, hogy csak 5-6kbyte-os kis applet egész törhető volt. (igaz lassú, és kicsi képe van, de működik) Ennek a címét már nemtudom, de átküldöm ZIP-ben. Sajna forrást egyik JAVA-hoz sem adtak, pedig éppen én is most kóstólgatom a témát, és valószínűleg ki tudtam volna hámozni belőle a lényeget. Van egy pár demó file-om mind IPIX, mind pedig QuickTime alá, ha segít valamit, és neked nincs, át tudok küldeni egy párat. Azt hiszem a képet két 8mm (két, egymásnak ellentétes iránybá néző képet raknak össze, legalábbis az IPIX szerint) lencsével veszik le, ez segít valamit? Erröl a lencse dologról nincs valami forrásod. Úgy láttam, hogy a demókban ez is vissza köszönő téma (volt). Végül is nem az a célom, hogy megírjam újra a QT, csak látványban hasonlót akarok csinálni. Ha nem is pont azt az algoritmust használja, de a látvány valami hasonló, az nekem tökéletesen megfelel. Egyébként mindenféle flinc-flanc nélül, csak egy képe megjelenítését szeretnék megcsinálni, még a héten, így ha eszedbe jut még valami, azt nagyon-nagyon szívesn fogadom. Készítettem egy kis progit az alapján amit mondtál. Csak elméleti, még nem próbáltam ki, csak kiváncsi voltam, hogy jó úton haladok-e. (ha nagyon gyenge, nem kell kiröhögni:) Úgy csináltam, hogy van egy két dimenziós tömböm, ami meg egyezik a kimeneti kép (jelen esetben 320x240) méretével. Egyenlőra az egyszerűség kedvéért, külön tárolja a kép X-Z koordinátáinka az eltolását. (persze később ez egy érték lessz, csak most így egyszerűbnek tünt) Tehát a mostani állás szerint, pl. a kép X:0 Y:0 pontjára, a panorámakép edott pontjától X:-30 Y:-30 -ra lévő pontot teszi ki. Annyit csináltam még optimizáció kedvéért, hogy mivel szimetrikus, ezért csak a negyed képernyőre számoltam ki a cuccot, és tükröztem. #define XRES 320 #define YRES 240 #define HALFXR (XRES/2) #define HALFYR (YRES/2) #define MAX_SIN 1.0 #define FOCUS 30 #define ROUND(x) ((int)((x)+0.5)) struct { int x; int y; }table[XRES][YRES]; void calc_table(void) { int x,y; int sx,sy; float sinX,sinY; float deltaX = MAX_SIN/HELFXR; float deltaY = MAX_SIN/HELFYR; sinY = MAX_SIN; for (y=0;y<HELFYR;y++,sinY=-=deltaY) { sinX = MAX_SIN; for (x=0;x<HELFXR;x++,sinX-=deltaX) { sx = ROUND(FOCUS * sin(sinX)); sy = ROUND(FOCUS * sin(sinY)); table[x][y].x = -sx; table[x][y].y = -sy; table[RESX-x][y].x = sx; table[RESX-x][y].y = -sy; table[x][RESY-y].x = -sx; table[x][RESY-y].y = sy; table[RESX-x][RESY-y].x = sx; table[RESX-x][RESY-y].y = sy; } } } Szerinted jó úton indultam el? Legacy/TLD
Eloszoris szeretnem osszegyujteni a kiadott forrasaid (ByTeam). Ugy tudom van egy zsak ilyened es ugy remlik, hogy regebben is el akartam kerni, csak nem tom mi lett... elvileg az ftp://eotvos.battanet.hu/pub/byteam/ cimen fenn van (majd') az osszes kiadott cucc (eltekintve a legujabbaktol, amiket meg lusta voltam feluploadolni, meg nem igazan ment az upload funkcio - de mivel ujabban nem csinaltam olyat aminek olyan nagyon erdemes lett volna kidobni a forrasat, nem is dobtam ki forrast, ezert ez nem gond :) (a regiek forrasa se olyan hudejo, dehat kiadtuk.. legalabb nem vesznek el :) Kulonoskeppen erdekelne a Wego2, mert vki a panorama effektrol erdeklodott es ebben mintha lenne ilyen. ja, a bubbles? azt en vmi nagy tablazattal oldottam meg.. :) blala/elvont meg byteam is
Sikerült kitalálnom mi a neve ennek a kérdezett dolognak: "panoramic projection", így már, hogy tudom, hogyan kell ekresni találtam a neten egy pár infót róla. http://www.mhri.edu.au/~pdb/projection/lensdistortion/ http://www.threedee.com/mhedron/html/manual/panorama.htm Azért köszönöm a te segítségedet is, nem jártál túl messze a megoldástól kösz, Legacy/TLD