Régóta dédelgetett elméletem osztom meg veletek. Egyrészt azért, mert a megvalósítása igen sok időt és energiát venne igénybe, valamint nem elhanyagolhatóan pénz hiányzik hozzá, nem 2 fillér az elektronika hozzá.
Na szóval: Van két igen jó minőségű kameránk, fontos a felbontás, megatöbbi. Két kamerával nézünk egy objektumot, jelen esetben legyen ez egy kocka. A szemünk képes 3D-ben látni, ugye, ezt vesszük itt is alapul. A két kamerának a távolsága, egymással bezárt szöge, a kamerák látószöge adott.
Amint az ábrán látszik, a kockán lévő kék pöttyöt mindkét kamera látja. Ennek a pontnak a távolságát kellene valahogy kiszámolnunk, vagy pontosabban egy koordinátát szeretnénk hozzárendelni, (x,y,z) formában.
Az origó legyen mondjuk a két kamera közt húzódó zöld egyenes felezőpontja.
De előbb számoljuk ki a két piros vonal hosszát.
Az ábrán jelzett elnevezéseket használom fel a számolás során. A számoláshoz felhasználjuk a szinusz tételt. Azaz a háromszög oldalai úgy aránylanak egymáshoz, mint a velük szemben lévő szögek.
Felhasználva azt, hogy a háromszög szögeinek összege 180°, így a balra látható képlettel megvan "b" hossza.
Hasonlóan a "c" is kiszámolható, csak jobb felül sinA van, és persze bal oldalon "c".
Tehát megvan a két piros szakasz hossza, ezzel meghatározható a kék pötty x és y koordinátája.
Ehhez az egyenes egyenlete kell: y-y0=m(x-x0). Ahol a meredekséget a szögek tangensével kiszámolhatjuk.
"b" egyenlete: y-y1=tg(A)(x-x1)
"c" egyenlete: y-y2=tg(180-B)(x-x2)
x3, y3 kiszámolásához az adott egyenletrendszert kell megoldanunk, egy megoldás lesz: a kék pötty (x,y) koordinátái.
Eddig úgy tűnik, felesleges volt a két egyenes hosszát kiszámolni, de most már mindegy :).
Ezen a ponton ha a kilapított kis ábrát 3D-ben elképzeljük, akkor a kék pötty helyén most egy egyenes van, ami merőleges lenne az ábrára, azt most nem rajzolnám be, kibökné a szemetek :D. Hogy egy kicsit matekosok legyünk: nincs meg a z koordináta. A z koordináta kiszámolásához tehát oldalról kell nézni a dolgot, nem felülről:
Iyenkor a "D" szög amit ismerünk (itt most kb -15°). Azzal, hogy oldalra fordultunk, a koordinátarendszernek jelenleg az y-z összefüggésében látjuk a témát, ráadásul most balra megy a plusz iránya. Fel kell írni az origóból induló, tg(D) meredekségű egyenes egyenletét y és z függvényében. Itt igazából síkokkal játszadozunk, de az egyszerűség kedvéért projektálom mindig két koordinátára a dolgot. Az egyenlet: z=tg(D)y. A másik egyenes, amivel elmetszük: y=y3, ami az ábrán a kék függőleges egyenes. Behelyettesítve:
z=tg(D)y3
A végeredmény:
Ezzel kész is vagyunk. Szóval adott a kamerák távolsága, a kamerák által bezárt szög és a látószögük. Ha meg tudjuk mondani, melyik a közös pont a két képen, ki tudjuk számolni a koordinátáit. Ez az elmélet gyenge pontja, a közös pont megtalálása macerás dolog szoftveresen... Viszont, ha sikerül áthidalni a problémát, akkor ráeresztjük az összes közös pontra, és megkapjuk a 3D-s képet, textúrával. :)
Az egyenletekben lehet még hiba... párat már javítottam, mert a postot kb 1 hete írogatom, de nem kizárt, hogy elkerülte valami a figyelmem. Ha valami hibát láttok még benne, akkor pls szóljatok.