Kaip apskaičiuoti z koordinatę perspektyvinėje projekcijoje. Kelių vaizdų geometrinės savybės

Norint detaliai apibūdinti taško bruožų sekimo, kameros kalibravimo ir 3D objektų rekonstrukcijos metodus, būtina pristatyti perspektyvinį projektavimo modelį ir aprašyti šios transformacijos geometrines savybes. Kelių vaizdų taškai, gauti naudojant perspektyvinė projekcija, yra įsikūrę ypatingas santykis vienas su kitu, kurie apibūdinami epipoline geometrija. Šių santykių modeliai turi būti išsamiai išnagrinėti, nes Beveik visi trimatės rekonstrukcijos metodai reikalauja įvertinti atitinkamus modelius ir pasikliauti jų savybėmis.

Atskirai reikia pažymėti prielaidą, kad iš viso šaltinio vaizdai fiksuojama ta pati scena, t.y. kiekvienas vaizdas yra scenos vaizdas iš konkrečios kameros. Todėl aprašymo patogumui įvedama vaizdo sąvoka, kaip vaizdas su susijusiu fotoaparato modeliu, iš kurio jis buvo gautas.

Perspektyvinė projekcija

Perspektyvinės projekcijos modelis atitinka idealią skylutės kamerą. Šis modelis gana artimai atitinka daugumos šiuolaikinių foto ir vaizdo kamerų vaizdo konstravimo procesą. Tačiau dėl šiuolaikinės optikos apribojimų tikrasis procesas šiek tiek skiriasi nuo skylės kameros modelio. Realaus proceso ir modelio skirtumai vadinami iškraipymais ir modeliuojami atskirai.

Paprasčiausios skylutės kameros modelis patogus tuo, kad jį visiškai apibūdina projekcijos centras ir vaizdo plokštumos padėtis. Todėl bet kurio vaizdo scenos taško projekciją galima rasti kaip spindulio, jungiančio projekcijos centrą ir scenos tašką su vaizdo plokštuma, sankirtą.

Paprasčiausias perspektyvinės projekcijos modelis

Panagrinėkime paprasčiausią atvejį, kai kameros projekcijos (fokuso) centras yra koordinačių sistemos pradžioje, o vaizdo plokštuma sutampa su Z=1 plokštuma. Tegul (X,Y,Z) yra 3 taško koordinatės matmenų erdvė, ir (x,y) yra šio taško projekcija į vaizdą I. Perspektyvinė projekcija šiuo atveju apibūdinama tokiomis lygtimis:

IN matricos forma Naudojant vienarūšes koordinates, šios lygtys perrašomos taip:

(2.2)

Plokštuma, esanti 1 atstumu nuo projekcijos centro ir statmena optinei ašiai, vadinama idealia vaizdo plokštuma. Optinė ašis idealią vaizdo plokštumą kerta taške c, vadinamame pagrindiniu tašku. Paprasčiausio perspektyvinės projekcijos atvejo iliustracija parodyta fig. 1.

Vidinės kameros kalibravimas

Paprasčiausias perspektyvinės projekcijos atvejis beveik visada neatitinka tikrosios kameros. Atstumas nuo projekcijos centro iki vaizdo plokštumos, t.y. židinio nuotolis, žymimas f, dažniausiai nėra lygus 1. Taip pat vaizdo plokštumos taško koordinatės gali nesutapti su absoliučiomis koordinatėmis. Naudojant skaitmeninę kamerą, santykis tarp vaizdo taško koordinačių ir absoliučių taško koordinačių idealioje plokštumoje nustatomas pagal matricos pikselių formą ir dydį.

Skaitmeninės kameros matricos pikselių matmenis pažymėkime kaip p x , p y , pikselių pasvirimo kampą α , o pagrindinį tašką kaip , 2 pav. Tada taško (x,y) koordinatės vaizde, atitinkančiame tašką (x R , y R) idealioje plokštumoje, nustatomos išraiška:

(2.3)

Jei žymėsime f x ,f y židinio nuotolis f, matuojamas pikselių pločiais ir aukščiais, o tan(α)*f/p y žymimas s, tada 2.3 formulė paverčiama į:

(2.4)

Matrica K vadinama matrica vidinis kalibravimas fotoaparatai. Dažniausiai tikrose skaitmeninėse kamerose pikselių kampas artimas tiesiam, t.y. parametras s=0, o pikselio plotis ir aukštis yra lygūs. Pagrindinis taškas paprastai yra vaizdo centre. Todėl matricą K galima parašyti taip:

(2.5)

Ši prielaida apie K matricos formą plačiai naudojama siekiant supaprastinti kameros vidinio kalibravimo nustatymo algoritmus, taip pat sintetinio vaizdo modeliavime, reikalingam 3D rekonstrukcijos metodų kokybei ir efektyvumui įvertinti.

Išorinės kameros kalibravimas

Tegul M yra scenos taškas 3-matėje erdvėje. Bet koks judėjimas yra euklidinė erdvės transformacija, todėl vienarūšėse koordinatėse jis išreiškiamas taip:

(2.6)

kur R yra sukimosi matrica, T = T yra transliacijos vektorius.

Kameros judėjimas scenos atžvilgiu prilygsta atvirkštinis judėjimas scenos taškai kameros atžvilgiu, todėl lygūs:

(2.7)

kur R, T yra sukimosi matrica ir kameros judėjimo vektorius scenos atžvilgiu. Matrica C vadinama matrica išorinis kalibravimas fotoaparatai. Matrica C -1 vadinama matrica kameros judesiai. Taigi, išorinės kameros kalibravimo matrica paverčia scenos taškų koordinates iš scenos koordinačių sistemos į koordinačių sistemą, susietą su kamera.

Pilnas perspektyvinės projekcijos modelis

Iš 2.1, 2.4, 2.7 išraiškų galime gauti savavališkos perspektyvinės projekcijos išraišką bet kuriai kamerai su savavališka orientacija ir padėtimi erdvėje:

Trumpesne forma, atsižvelgiant į ankstesnį užrašą, ši formulė gali būti parašyta taip:

Matrica P vadinama kameros projekcijos matrica.

Analogiškai su bendrosios perspektyvinės transformacijos, pirmiausia panagrinėkime paprasčiausią perspektyvinės plokštumos transformacijos atvejį. Tegul plokštuma p sutampa su plokštuma Z=0, tada vienalytė 3D koordinates bet kuris jo taškas M=. Bet kuriai kamerai su projekcijos matrica P plokštumos perspektyvinė transformacija apibūdinama 3*3 matrica:


Kadangi bet kurią plokštumą trimatėje erdvėje galima perkelti į Z = 0 plokštumą euklidine sukimosi ir transliacijos transformacija, kuri yra lygiavertė kameros matricos P padauginimui iš transformacijos matricos L, savavališkos plokštumos erdvėje perspektyvinis vaizdas. yra aprašytas tiesinė transformacija su 3*3 matrica.

Taip pat vadinama perspektyvinė plokštumos transformacija homografija. Matricos formoje perspektyvinė plokštumos transformacija rašoma kaip m = HM.

Dviejų vaizdų geometrija

Visuose šaltinio vaizduose užfiksuota scena laikoma nejudančia, todėl santykinė scenos taškų projekcijų padėtis skirtinguose kadruose negali savavališkai keistis. Apribojimai, taikomi taškinių projekcijų vietai, akivaizdžiai priklauso nuo kamerų parametrų ir jų padėties viena kitos atžvilgiu. Todėl tokių apribojimų modelių nustatymas suteikia tam tikros informacijos apie kamerų, iš kurių buvo gauti vaizdai, santykines padėtis.

Perspektyvinės plokštumos transformacija

Jei dviejų kamerų centrai sutampa, tai abiejų kamerų vaizdo plokštumų taškai paverčiami vienas į kitą plokštumos perspektyvine transformacija. Šiuo atveju taškų transformacija tarp vaizdų nepriklauso nuo 3 dimensijos scenos formos, o priklauso tik nuo abipusę poziciją vaizdo plokštumos.

Jei visa scena ar jos dalis yra plokštuma, tada jos vaizdai bus rodomi skirtingi tipai su nesutampančiais kamerų centrais gali būti konvertuojami vienas į kitą homografine transformacija. Tegul p yra stebima plokštuma, H 1 yra homografinė transformacija tarp plokštumos p ir vaizdo aš 1, H 2 - homografinė transformacija tarp plokštumos p ir vaizdo aš 2. Tada homografijos transformacija H 12 tarp vaizdų aš 1 Ir aš 2 gali būti išvesta taip:

H 12 nepriklauso nuo plokštumos p parametrizavimo, todėl nepriklauso nuo koordinačių sistemos erdvėje

Dauguma 3D taškų koordinačių nustatymo iš jų projekcijų metodų ir 3D scenos atkūrimo metodų yra pagrįsti prielaida, kad kameros centras juda tarp vaizdų. Todėl, jei kelių tipų kamerų centrai sutampa, šie metodai duos neteisingus rezultatus. Tokios kameros konfigūracijos turi būti aptiktos ir tvarkomos specialiu būdu.

Kadangi homografijos transformacija rašoma vienarūšėmis koordinatėmis, matrica H apibrėžiama iki mastelio. Jis turi 8 laisvės laipsnius ir yra parametruojamas 8 kintamaisiais. Kiekviena žinoma atitinkamų taškų pora m 1 Ir m 2 pirmame ir antrame paveikslėlyje atitinkamai pateikiama 2 tiesines lygtis iš matricos H elementų. Todėl 8 lygčių su 8 nežinomaisiais tiesinių lygčių sistemai sudaryti pakanka 4 žinomų atitinkamų taškų porų. Pagal šią sistemą homografija H gali būti vienareikšmiškai nustatyta, jei nė vienas iš trijų taškų nėra toje pačioje tiesėje.

Fundamentalioji matrica

Panagrinėkime atvejį, kai dviejų tipų kamerų centrai nesutampa. Leisti C 1 Ir C 2- dviejų kamerų centrai, M - 3 dimensijos scenos taškas, m 1 Ir m 2- taško M projekcijos atitinkamai į pirmąjį ir antrąjį atvaizdus. Tegu P yra plokštuma, einanti per tašką M ir kamerų centrus C 1 Ir C 2. Plokštuma P kerta pirmojo ir antrojo vaizdo vaizdo plokštumas tiesiomis linijomis l 1 Ir l 2. Kadangi spinduliai C 1 M Ir C 2 M guli plokštumoje P, tada akivaizdu, kad taškai m 1 Ir m 2 gulėti ant tiesių linijų l 1 Ir l 2 atitinkamai. Galime pateikti bendresnį teiginį, kad bet kurio taško M", esančio plokštumoje Π, projekcijos į abu vaizdus turi būti tiesiose l 1 Ir l 2. Šios linijos vadinamos epipolinėmis linijomis. Plokštuma P vadinama epipoline plokštuma.

Du tos pačios scenos vaizdai vadinami stereo pora ir segmentu C 1 C 2, jungiantis kamerų centrus, vadinamas stereo poros pagrindu (bazinė linija) arba stereo baze. Bet kuri epipolinė plokštuma eina per segmentą C 1 C 2. Leisti C 1 C 2 taškuose kerta pirmąjį ir antrąjį atvaizdus e 1 Ir e 2 atitinkamai. Taškai e 1 Ir e 2 vadinami epipoliniais taškais arba epipoliais. Visos epipolinės linijos susikerta taškuose e 1 Ir e 2 atitinkamai pirmame ir antrame paveikslėlyje. Epipolinių plokštumų rinkinys yra spindulys, susikertantis išilgai stereo pagrindo C 1 C 2. Daugybė epipolinių linijų abiejuose vaizduose taip pat reiškia tiesių linijų, susikertančių taške, pluoštus e 1 Ir e 2 .

Taškai m 1 Ir m 2 vadinami atitinkamais, jei tai to paties scenos taško M projekcijos. Epipolinės linijos l 1 Ir l 2 vadinami atitinkamais, jei yra toje pačioje epipolinėje plokštumoje P. Jei epipolinė plokštuma P eina per tašką m 1, tada epipolinės linijos l 1 Ir l 2, jame gulintys vadinami atitinkančiais tašką m 1.

Atitinkamų taškų padėties apribojimas m 1 Ir m 2, kuris išplaukia iš epipolinės geometrijos, gali būti suformuluotas taip: taškas m 2, atitinkamas m 1, turi gulėti ant epipolinės linijos l 2, atitinkamas m 1. Ši sąlyga vadinama epipoliniu apribojimu. Vienalytėse koordinatėse sąlyga, kad taškas m guli ant linijos l parašyta kaip l T m=0. Epipolinė linija taip pat eina per epipolinį tašką. Tiesės, einančios per taškus, lygtis m 1 Ir e 1 gali būti parašytas taip:

l 1 ∼ x m 1,

Kur x- antisimetrinė 3*3 matmenų matrica, kad x m 1 - vektorinis produktas m 1 Ir e 1.

Atitinkamoms epipolinėms linijoms l 1 Ir l 2 dešinėje:

Kur P+- matricos P pseudoinversija.

Matrica F vadinama pagrindine matrica. Ji atstovauja linijinis operatorius, atitinkantis kiekvieną tašką m 1 atitinkama epipolinė linija l 2. Kiekvienai atitinkamų taškų porai m 1 Ir m 2 teisingai

m T 2 Fm 1 =0

Tai epipolinio apribojimo formuluotė per pagrindinę matricą.

Pagrindinė matrica turi 7 laisvės laipsnius. Kiekviena atitinkamų taškų pora m 1 Ir m 2 apibrėžia vieną tiesinę lygtį matricos elementams, todėl ją galima apskaičiuoti iš žinomų 7 porų atitinkamų taškų.

Epipolinis apribojimas galioja bet kurioms atitinkamų taškų poroms, esančioms idealiose dviejų tipų plokštumose. Jei žinomos vidinės kalibravimo matricos K 1 Ir K2 abiejų tipų fotoaparatai, tada epipolinis apribojimas atitinkamiems taškams idealiose plokštumose užrašomas taip:

Matrica E vadinama reikšmingas matrica. Galima parodyti, kad esminę matricą galima gauti ir iš santykinių kamerų padėčių.

Leisti P 1 =(I|0) Ir P 2 =(R|-RT)- dvi projektavimo matricos su kalibravimu K = I. Tada abiejų kamerų idealios plokštumos projektinės lygtys užrašomos tokia forma:

Antrajame vaizde suraskime epipolinę liniją, atitinkančią tašką m" 1 ant pirmojo. Norėdami tai padaryti, pakanka į antrąjį vaizdą suprojektuoti du taškus, esančius ant spindulio (C 1,m" 1)į antrąjį vaizdą, pavyzdžiui, į pirmosios kameros centrą (0,0,0,1) T ir taškas begalybės plokštumoje (x" 1 ,y" 1 ,z" 1 ,0) T. Šių taškų projekcijos bus -RT, ir R(x"1,y"1,z"1,0)T. Epipolinės linijos lygtis l 2, einanti per abu šiuos taškus, pateikiama kaip vektorinė sandauga:

l 2 =RT×R(x"1,y"1,z"1)T =R(T×(x"1,y"1,z"1)T)

Matricos pavidalu vektorius nėra sandauga T×(x"1,y"1,z"1)T galima parašyti naudojant matricą S:

Tada idealios plokštumos taškų epipolinis suvaržymas užrašomas taip:

Esminės matricos išreiškimas dviejų kamerų išoriniais kalibravimo parametrais naudojama santykinėms kamerų padėtysms apskaičiuoti.

Trijų ar daugiau vaizdų geometrinės savybės

Leisti C 1,C 2 Ir C 3- trijų tos pačios trimatės scenos vaizdų centrai. Šiuo atveju epipoliniai apribojimai taikomi atitinkamiems bet kurios rūšių poros taškams. Jei žinomos dviejų taškų projekcijos m 1 Ir m 2į pirmąjį ir antrąjį rodinius, tada projekcijos į trečiąjį vaizdą padėtį galima rasti kaip dviejų epipolinių vaizdų, atitinkančių taškus, sankirtą m 1 Ir m 2.

Pagal dvi žinomas prognozes m 1 Ir m 2 Naudojant du vaizdus su žinomu kalibravimu, galima nustatyti taško M padėtį erdvėje. Todėl, jei žinomas trečiojo vaizdo kalibravimas, taško M projekciją į trečiąjį vaizdą galima nustatyti paprasta projekcija.

Taip pat galima įrašyti apribojimus, taikomus atitinkamų taškų padėčiai daugiau nei dviejuose vaizduose linijinė forma. Trijų tipų atveju šie apribojimai parašyti trifokalinio tenzoriaus forma, keturiems tipams - keturkampio tenzoriaus forma. Tačiau šių apribojimų apskaičiavimas prilygsta visų trijų ar keturių projekcinėje erdvėje esančių vaizdų matuokliui. Šio tipo apribojimai šiame darbe nenaudojami, todėl plačiau neaptariami.

Metų darbai. Vološinas Maksimilianas. POETĖS VALORAS. 1. Redaguokite eilėraštį kaip siuntimo į užsienį tekstą: Sausumas, aiškumas, spaudimas – kiekvienas žodis yra budrus.

Raidė po raidės pjaustyti ant kieto ir ankšto akmens: Nei taupiai tariant, tuo intensyvesnė jų jėga. Valingas minties užtaisas prilygsta tylioms strofoms.

Iš žodyno ištrinkite žodžius „Grožis“, „Įkvėpimas“ - šlykštų rimuotojų žargoną. Blaivus, sunkus amatas yra poeto įkvėpimas ir garbė: kurčnebylioje materijoje sustiprinti transcendentinį budrumą. Vološinas M.A. Biblioteka: Oryol regioninė mokslinė universali biblioteka viešoji biblioteka juos. I.A. Bunina. - M., ; Pasirinkti kūriniai: 2 tomais.

M., ; Raudoni dūmai: istorijos. - M., ; Gladyševas iš žvalgybos kompanijos: istorijos. - M., ; Ešelonas; Neišvengiamybė: romanai. Jis daug vertė marių ir udmurtų poetus. Kartkartėmis išbandydavau jėgas ir prozoje. Op. Maksimilianas Aleksandrovičius Vološinas () - vienas iš didžiausi poetai pirmasis XX amžiaus trečdalis. Tai talentingas menininkas, daugialypis tekstų autorius, pro taką nuo simbolistinių, ezoterinių eilėraščių iki pilietinės-žurnalistinės ir mokslinės-filosofinės poezijos, per antroposofinius polinkius - iki „Dievo miesto idealo“.

Siūlomas leidinys leidžia skaitytojui susipažinti ne tik su geriausiais poetiniai kūriniai Vološinas, bet ir – su savo dauguma įdomių darbų estetikoje, memuarinėje prozoje, publicistikoje ir laiškuose, susijusiuose su dramatiškais šalių gyvenimo įvykiais. Autorius. Vološinas Maksimilianas. Visi autorės eilėraščiai. Darbas. Poeto narsumas. 2. Žvaigždės. Sukurkite mėgstamus autorių ir eilėraščių rinkinius!

Kalbėkitės su bendraminčiais! Rašykite atsiliepimus, dalyvaukite poezijos dvikovose ir konkursuose! Prisijunk prie geriausių! Dėkojame, kad prisijungėte prie Poembook! Jūsų el. paštu išsiųstas laiškas su prieigos prie paskyros duomenimis!

Turite prisijungti per 24 valandas. Priešingu atveju paskyra bus ištrinta! Užsiregistravę vartotojai gauna daug privalumų: skelbkite poeziją – realizuokite savo talentą! Sukurkite mėgstamus autorių ir eilėraščių rinkinius! Kalbėkitės su bendraminčiais! Rašykite atsiliepimus, dalyvaukite poezijos dvikovose ir konkursuose!. Maksimilianas Vološinas. Apibūdinimas. Maksimilianas Aleksandrovičius Vološinas yra vienas didžiausių XX amžiaus pirmojo trečdalio poetų.

Tai talentingas menininkas, daugialypis lyrikas, perėjęs kelią nuo simbolistinių, ezoterinių eilėraščių iki pilietinės-žurnalistinės ir mokslinės-filosofinės poezijos, per antroposofinius polinkius - į „Dievo miesto idealą“. Siūlomas leidinys suteikia skaitytojui galimybę susipažinti ne tik su geriausiais Vološino poetiniais kūriniais, bet ir su įdomiausiais estetikos, memuarinės prozos, publicistikos ir su drama susijusiais laiškais.

Pasirinkti darbai ir laiškai. M. A. Vološinas. Kaina. patrinti. Maksimilianas Aleksandrovičius Vološinas yra vienas didžiausių XX amžiaus pirmojo trečdalio poetų. Tai talentingas menininkas, daugialypis lyrikas, nuo simbolistinių, ezoterinių eilėraščių perėjęs prie pilietinės-žurnalistinės ir mokslinės-filosofinės poezijos, per antroposofinius polinkius - iki „Dievo miesto idealo“.

Vološinas M.A., Poeto narsumas: rinktiniai kūriniai ir laiškai. serija: Nauja biblioteka Rusų klasika: privalomas egzempliorius Paradas, miestas, puslapis, Knygos aprašymas. Maksimilianas Aleksandrovičius Vološinas () yra vienas didžiausių XX amžiaus pirmojo trečdalio poetų. Tai talentingas menininkas, įvairiapusis lyrikas, nuėjęs kelią nuo simbolinių, ezoterinių eilėraščių iki pilietinės-žurnalistinės ir mokslinės-filosofinės poezijos, per antroposofinius polinkius - į „Dievo miesto idealą“.

KategorijosĮrašo navigacija

Šiuo metu dažniausiai naudojami tie, kurie vaizdus sintezuoja plokštumoje – ekrane arba popieriuje. Įrenginiai, sukuriantys tikrai trimačius vaizdus, ​​vis dar yra gana reti. Tačiau vis dažniau pasirodo informacijos apie tokius pokyčius, pavyzdžiui, apie tūrinius ekranus ar net apie trimačius spausdintuvus.

Naudojant bet kokius grafikos įrenginius, dažniausiai naudojamos projekcijos. Projekcija nurodo, kaip objektai rodomi grafiniame įrenginyje. Mes atsižvelgsime tik į projekcijas į plokštumą.

Pasaulio ir ekrano koordinatės

Spausdintuvu rodydami erdvinius objektus ekrane arba popieriaus lape, turite žinoti objektų koordinates. Mes apsvarstysime dvi koordinačių sistemas. Pirmas - pasaulio koordinates, kurios tam tikru tikslumu apibūdina tikrąją objektų padėtį erdvėje. Kitas yra vaizdo įrenginio koordinačių sistema, kurioje objektų vaizdai rodomi tam tikroje projekcijoje.

Tegul pasaulio koordinatės yra 3D Dekarto koordinatės. Kur turėtų būti koordinačių centras ir kokie matavimo vienetai išilgai kiekvienos ašies, mums kol kas nėra labai svarbu. Svarbiausia, kad dėl vaizdus, ​​žinosime kai kurias rodomų objektų koordinačių skaitines reikšmes.

Norint gauti vaizdą konkrečioje projekcijoje, būtina apskaičiuoti projekcijos koordinates. Iš jų galite gauti grafikos įrenginio koordinates – pavadinkime jas ekrano koordinates. Norint susintetinti vaizdą plokštumoje, pakanka dvimatės koordinačių sistemos. Tačiau kai kurie atvaizdavimo algoritmai naudoja 3D ekrano koordinates, pvz., Z-buferio algoritmą.

Pagrindiniai projekcijų tipai

IN Kompiuterinė grafika dažniausias lygiagrečiai Ir centrinis projekcijos (2.15 pav.).

Centrinei projekcijai (taip pat vadinama daug žadantis) projekciniai spinduliai kyla iš vieno taško, esančio baigtiniu atstumu nuo objektų ir projekcijos plokštumos. Dėl lygiagreti projekcija projekcijos spinduliai lygiagretūs.

Aksonometrinė projekcija

Aksonometrinė projekcija yra lygiagrečios projekcijos tipas. Jai visi projekciniai spinduliai yra stačiu kampu projekcijos plokštumai (2.16 pav.).

[Projekcinės plokštumos padėtis nustatykime naudodami du kampus – α ir β , Padėkime kamerą taip, kad ašies projekcija z projekcijos plokštumoje X0Y būtų vertikali linija (lygiagreti operacinės stiprintuvo ašiai).

Ryžiai. 2.16. Aksonometrinė projekcija

Norint rasti ryšius tarp koordinačių (x, y,z) Ir (X, Y, Z) bet kuriame trimatėje erdvėje apsvarstykite koordinačių sistemos transformacijas ( X, y,z) į sistemą (X, Y, Z). Apibrėžkime tokią transformaciją dviem etapais.

1-oji žingsnis. Koordinačių sistemos sukimas apie ašį z kampu α. Šį ašių sukimąsi apibūdina matrica

2-oji žingsnis. Koordinačių sistemos pasukimas (x, y",z") ašies atžvilgiu X" pagal kampą β - gauti koordinates (X, Y, Z). Sukimosi matrica

Koordinačių transformacijas išreiškiame matricų sandauga B*A:

Užsirašykime
projekcijos koordinačių transformacija formulių pavidalu:

Ar manote, kad ta pati projekcija bus gauta, jei koordinačių transformacijos bus aprašytos tais pačiais dviem etapais, bet skirtinga seka – pirmiausia pasukant koordinačių sistemą x ašies atžvilgiu kampasβ , ir tada pasukite koordinačių sistemą ašies atžvilgiu z" pagal kampą α? Ir ar koordinačių sistemoje bus vertikalių linijų (x, y, z) taip pat nubrėžtos vertikalios koordinačių sistemos (X, U, Z)? Kitaip tariant, daro A*B – B*A?Atvirkštinė koordinačių transformacija aksonometrinė projekcija. Kad projekcijos koordinatės (X, Y, Z) konvertuoti į pasaulio koordinates (x, y,z), reikia atlikti atvirkštinę posūkių seką. Pirmiausia pasukite kampu -β, tada pasukite kampu - α . Parašykime atvirkštinę transformaciją matricos forma

Sukimosi matricos:

Padauginus matricas A -1 ir B -1, gauname atvirkštinės transformacijos matricą:

Parašykime ir atvirkštinę transformaciją formulių pavidalu

Perspektyvinė projekcija

Pirmiausia nagrinėsime perspektyvinę projekciją (2.17 pav.), kai vertikalus išdėstymas fotoaparatai, kai a=β= 0. Tokią projekciją galima įsivaizduoti kaip vaizdą ant stiklo, pro kurį žiūri virš taško esantis stebėtojas (x, y,z) = (0, 0, z k). Čia projekcijos plokštuma lygiagreti plokštumai (xOy).

Remdamiesi trikampių panašumu, užrašome šias proporcijas:

Taip pat atsižvelgiant į Z koordinatę:

Matricos pavidalu koordinačių transformaciją galima parašyti taip:

Ryžiai. 2.17. Perspektyvinė projekcija

Atkreipkite dėmesį, kad čia matricos koeficientai priklauso nuo koordinatės z (trupmenų vardiklyje). Tai reiškia, kad koordinačių transformacija yra netiesinė (tiksliau, trupmeninė tiesinė), ji priklauso klasei projekcinis transformacijos.

Dabar pasvarstykime bendras atvejis- savavališkiems kameros kampams (A Ir R) tokia pati kaip lygiagrečiai aksonometrinei projekcijai. Leisti (x, y",z 1 ) - pradinės sistemos atžvilgiu pasuktos koordinačių sistemos koordinatės (x, y,z) į kampus α ir β .

Perspektyvinės projekcijos koordinačių transformacijas parašykime tokia forma:

Koordinačių transformacijos seką galima apibūdinti taip:

Transformacija paprastai yra netiesinė. Jo negalima apibūdinti viena pastovių koeficientų matrica visiems scenos objektams (nors koordinatėms transformuoti galima naudoti matricos formą).

Tokiai perspektyvinei projekcijai projekcijos plokštuma yra statmena spinduliui, sklindančiam iš centro (x, y,z)= (0, 0, 0) ir pasviręs kampu α , β . Jei kamera atitraukta nuo koordinačių centro, centrinė projekcija pasikeičia. Kai kamera yra begalybėje, centrinė projekcija išsigimsta į lygiagrečią projekciją.

Nurodykime pagrindines perspektyvinės transformacijos savybes. Centrinėje

prognozės:

□ neišsaugomas ilgių ir plotų santykis;

□ tiesios linijos vaizduojamos kaip tiesios linijos;

□ lygiagrečios tiesės vaizduojamos kaip susiliejančios viename taške.

Paskutinis turtas yra plačiai naudojamas aprašomoji geometrija piešimui ant popieriaus ranka. Tai iliustruosime namo karkaso pavyzdžiu (2.18 pav.).

Yra ir kitų perspektyvinių projekcijų, kurios skiriasi projekcinės plokštumos padėtimi ir projekcinių spindulių konvergencijos taško vieta. Be to, projekcija gali būti atliekama ne plokštumoje, o, pavyzdžiui, ant sferinio ar cilindrinio paviršiaus.

Apsvarstykite įstrižąją projekciją, kurios projekcijos spinduliai nėra statmeni projekcijos plokštumai. Pagrindinė tokios projekcijos idėja yra ta, kad kamera yra pakelta į aukštį h išlaikant vertikalią projektinės plokštumos padėtį (2.19 pav.).

Ryžiai. 2.18. Lygiagrečios linijos yra pavaizduotos centrinėje projekcijoje, susiliejančios viename taške

Ryžiai. 2.19. Įstriža projekcija

Tokią projekciją galite gauti tokiu būdu:

1. Sukite aplink ašį z kampu A.

2. Mes pakeičiame z" įjungta -y", a.u" iki z".

3. Perkelkite koordinačių sistemą į kameros aukštį h

4. Plokštumoje (x, y", 0) sukonstruoti perspektyvinę projekciją aukščiau jau aptartu metodu (spindulių išnykimo taškas ašyje z).

Koordinačių transformaciją galima apibūdinti taip. Pirmiausia nustatykite (x), y“,z).

Ir tada atliekama perspektyvinė transformacija

Tokios projekcijos pranašumas yra tas, kad ji išlaiko lygiagretumą vertikalios linijos, kuris kartais praverčia vaizduojant namus architektūrinėse kompiuterinėse sistemose.

Vaizdų pavyzdžiai skirtingos projekcijos. Pateiksime identiškų objektų vaizdų skirtingose ​​projekcijose pavyzdžių. Objektai bus tokio pat dydžio kubeliai. Kameros padėtis nustatoma pagal pasvirimo kampus α = 27°, β = 70°.

Aksonometrinės projekcijos pavyzdys parodytas fig. 2.20.

Ryžiai. 2.20.Aksonometrinė projekcija

Dabar pažvelkime į perspektyvinės projekcijos pavyzdžius. Skirtingai nuo lygiagrečios projekcijos, vaizdas perspektyvinėje projekcijoje labai priklauso nuo projekcijos plokštumos padėties ir atstumo nuo fotoaparato.

Optinėse sistemose ši sąvoka žinoma židinio nuotolis. Kuo ilgesnis objektyvo židinio nuotolis, tuo mažesnis perspektyvos suvokimas (2.21 pav." ir atvirkščiai, trumpo židinio nuotolio objektyvams perspektyva yra didžiausia (2.22 pav.). Šis efektas Tikriausiai jau pastebėjote, ar filmavote vaizdo kamera ar kamera. Savo pavyzdžiuose galime pastebėti tam tikrą atitikimą tarp atstumo nuo kameros iki projekcijos plokštumos { z k z pl ) ir objektyvo židinio nuotolis. Tačiau šis atitikimas yra sąlyginis.

Toliau pateiktuose pavyzdžiuose (2.21, 2.22 pav.) z pl = 700. Kameros pasvirimo kampai α = 27°, β = 70°.

Ryžiai. 2.21.Perspektyvi projekcija ilgo fokusavimo kamerai( z K = 2000)

Ryžiai. 2.22.Trumpo nuotolio fotoaparato perspektyvinė projekcija( z K = 1200)

Trumpo nuotolio fotoaparato atveju (z K = 1200) perspektyvos suvokimas labiausiai pastebimas kubeliams, kurie yra arčiausiai kameros. Vertikalios objektų linijos projekcijoje nėra vertikalios (objektai subyra").

Pažiūrėkime į pavyzdžius įstriža projekcija(2.23, 2.24 pav.). Jai vertikalios objektų linijos išlaiko vertikalią vietą projekcijoje. Aprašoma kameros padėtis (projekcinių spindulių konvergencijos taškas). sukimosi kampas α = 27° ir kėlimo aukštis h = 500. Projekcinė plokštuma lygiagreti plokštumai (x"O") ir yra atokiau z pl = 700.

Ryžiai.2.23. Įstriža perspektyvinė projekcija ilgo fokusavimo kamerai( z K = 2000)

Ryžiai. 2.24.Įstriža perspektyvinė projekcija trumpo nuotolio kamerai( z K = 1200)

Pažvelkime į kitą centrinės projekcijos vaizdo pavyzdį – žymą „Žvaigždžių karų“ filmo stiliumi:

Rodyti lange

Kaip jau aptarėme aukščiau, atvaizdavimas projekcijos plokštumoje atitinka tam tikrą koordinačių transformaciją. Ši koordinačių transformacija skirtingiems projekcijų tipams yra skirtinga, tačiau vienaip ar kitaip pereinama prie naujos koordinačių sistemos – projekcijos koordinačių. Projekcijos koordinatės gali būti naudojamos kuriant vaizdą naudojant grafikos išvesties įrenginį. Tačiau tam gali prireikti papildomų transformacijų, nes koordinačių sistema projekcijos plokštumoje gali nesutapti su rodymo įrenginio koordinačių sistema. Pavyzdžiui, turi būti rodomi objektai, matuojami kilometrais, o rastriniame ekrane matavimo vienetas yra pikselis. Kaip išreikšti kilometrus pikseliais?

Be to, tikriausiai matėte, kad kompiuterio ekrane galima rodyti padidintus, sumažintus objektų vaizdus, ​​o taip pat juos perkelti. Kaip tai daroma?

Leiskite pristatyti kai kuriuos užrašus. Leisti (Jis, Ue,Ze) yra grafinio rodymo įrenginio objektų ekrano koordinatės. Atminkite, kad žodžio „ekranas“ neturėtume priimti taip, lyg kalbėtume tik apie ekranus – visa tai gali būti taikoma bet kuriems kitiems įrenginiams, kurie naudoja Dekarto koordinačių sistemą. Projekcijos koordinates čia žymime kaip (X, Y, Z).

Paskambinkime langas stačiakampė išvesties sritis su ekrano koordinatėmis

XaiminUetp) – (Hetah Uetah) – Paprastai turite rodyti lange ARBA VISUS

scena, arba atskira jos dalis (2.25 pav.).

Ryžiai. 2.25. Scenos projekcijos ekranas

a - scenos ribos projekcijos koordinatėse;b - dalis scenos yra lange, c - visa scena įrašyta į langą, išlaikant proporcijas

Projekcijos koordinačių konvertavimas į ekrano koordinates gali būti nurodytas kaip tempimas / susitraukimas ir šlytis:

X E = KX +dx, ; Y E = KY+ dy; Ze =KZ.

Ši transformacija išsaugo objektų proporcijas dėl to paties tempimo/susitraukimo santykio (Į) visoms koordinatėms. Atkreipkite dėmesį, kad plokščiam žemėlapiui galite atmesti Z koordinatę. Pažiūrėkime, kaip galite apskaičiuoti Į,dxIrdy. Pavyzdžiui, reikia sutalpinti visą scenos vaizdą į nurodytų matmenų langą. Tinkamumo sąlyga gali būti apibrėžta taip:

Jei pridėsime (1) prie (3), gausime:

Iš (2) ir (4) nelygybių išplaukia:

K sistemos (1)–4) sprendimas bus toks: KAM min (Kx, Ku) = K min .

Jei vertė KAM X arba prasmė K Y lygi begalybei, tada ją reikia atmesti. Jei abu – tada vertė KAM min galima nustatyti lygus vienam. Dga| Kad vaizdas lange būtų didžiausio dydžio, pasirenkame KAM= KAM min Dabar galite rasti dx. Iš nelygybės (1):

Iš nelygybės (3): I

Nes dx1 < dx2, tada vertė dx galima pasirinkti iš I intervalo dx1 dx dx2. Pasirinkite centrinę vietą lange: I

Panašiai galime rasti dy:

Su tokiomis vertybėmis dxIrdy scenos centras bus lango centre.

Kitais atvejais, kai reikia atitinkamu masteliu rodyti tik dalį scenos lange, galite tiesiogiai nustatyti skaitines skalės reikšmes (Į) ir poslinkio koordinates (dx, dy). At sąsajos dizainas grafikos sistema patartina apriboti pasirinkimą Į,dx, dy priimtinų verčių diapazoną.

Grafikos sistemos naudoja įvairius metodus, skirtus nurodyti ekrano išdėstymą ir apibrėžti scenos ribas, kad būtų rodoma peržiūros lange. Pavyzdžiui, slinkties slankikliai dažnai naudojami perkėlimui. Be to, nukreipkite žymeklį į pietus į scenos tašką, tada šis taškas taps centriniu lango tašku arba galite nubrėžti stačiakampį, paryškindami scenos fragmento ribas – tada šis fragmentas bus įrašytas. langas ir tt Visi šie rodymo metodai yra pagrįsti tempimu ir suspaudimu (masteliu), taip pat poslinkiu ir yra aprašyti afinine koordinačių transformacija.

Tam tikru momentu bet kuriam kompiuterinės grafikos kūrėjui kyla klausimas: kaip veikia šios perspektyvios matricos? Kartais labai sunku rasti atsakymą ir, kaip dažniausiai nutinka, dauguma kūrėjų pasiduoda įpusėjus užduočiai.

Tai nėra problemos sprendimas! Išsiaiškinkime tai kartu!

Būkime realistai su praktiniu šališkumu ir imkime testą OpenGL versijos 3.3. Nuo šios versijos kiekvienas kūrėjas privalo savarankiškai įdiegti modulį matricos operacijos. Puiku, štai ko mums reikia. Išskaidykime savo sudėtingą užduotį ir pabrėžkime pagrindinius dalykus. Kai kurie faktai iš OpenGL specifikacijos:

  • Matricos saugomos stulpeliuose (stulpelis-major);
  • Homogeninės koordinatės;
  • Kanoninis iškirpimo tūris (CVV) kairiarankėje koordinačių sistemoje.
Yra du būdai saugoti matricas: pagrindinė stulpelio dalis ir pagrindinė eilutė. Paskaitose apie tiesinė algebra naudojama pagrindinės eilutės schema. Autorius iš esmės Matricų atvaizdavimas atmintyje neturi reikšmės, nes matricą visada galima konvertuoti iš vieno atvaizdo į kitą paprastu perkėlimu. Ir kadangi nėra jokio skirtumo, visiems tolesniems skaičiavimams naudosime klasikines eilučių pagrindines matricas. Programuojant OpenGL yra nedidelė gudrybė, leidžianti išvengti matricų perkėlimo išlaikant klasikinius eilučių pagrindinius skaičiavimus. Matrica turi būti perkelta į atspalvio programą tokią, kokia yra, o atspalvyje daugyba turėtų būti atliekama ne tarp vektoriaus ir matricos, o tarp matricos ir vektoriaus.

Vienarūšės koordinatės nėra labai sudėtinga sistema su daugybe paprastos taisyklės konvertuojant įprastas Dekarto koordinates į vienarūšės koordinatės ir atgal. Vienalytė koordinatė yra matmenų eilutės matrica. Norint paversti Dekarto koordinatę į vienalytę koordinatę, būtina x, y Ir z padauginti iš bet kurio tikras numeris w(išskyrus 0). Tada turite įrašyti rezultatą pirmuosiuose trijuose komponentuose, o paskutinis komponentas bus lygus daugikliui w. Kitaip tariant:
- Dekarto koordinatės
w– realusis skaičius nelygus 0

- vienarūšės koordinatės

Maža gudrybė: jei w lygus vienetui, tada vertimui tereikia perkelti komponentus x, y Ir z ir priskirkite vieną paskutiniam komponentui. Tai yra, gaukite eilutės matricą:

Keletas žodžių apie nulinę kokybę w. Vienalyčių koordinačių požiūriu tai yra gana priimtina. Homogeninės koordinatės leidžia atskirti taškus ir vektorius. Dekarto koordinačių sistemoje toks padalijimas neįmanomas.

- taškas kur ( x, y, z) – Dekarto koordinatės

- vektorius, kur ( x, y, z) – spindulio vektorius

Viršūnės atvirkštinis vertimas iš homogeninių koordinačių į Dekarto koordinates atliekamas taip. Visi eilutės matricos komponentai turi būti padalyti iš paskutinio komponento. Kitaip tariant:

- vienarūšės koordinatės
- Dekarto koordinatės

Svarbiausia žinoti, kad visi OpenGL karpymo ir rastravimo algoritmai veikia Dekarto koordinatėmis, bet prieš tai visos transformacijos atliekamos vienarūšėmis koordinatėmis. Perėjimas nuo vienalyčių koordinačių prie Dekarto koordinačių atliekamas techninėje įrangoje.

Kanoninis iškarpų tūris (CVV) yra viena mažiausiai dokumentuotų OpenGL dalių. Kaip matyti iš fig. 1 CVV yra ašies išlygiuotas kubas, kurio centras yra pradžioje ir kurio briaunos ilgis lygus dviem. Viskas, kas patenka į CVV sritį, yra rastruojama, viskas, kas yra už CVV, yra ignoruojama. Viskam, kas iš dalies nepatenka į CVV, taikomi genėjimo algoritmai. Svarbiausias dalykas, kurį reikia žinoti, yra tai, kad CVV koordinačių sistema yra kairiarankė!


Ryžiai. 1. Kanoninis OpenGL iškarpų tūris (CVV)

Kairiarankė koordinačių sistema? Kaip tai gali būti, nes OpenGL 1.0 specifikacijoje aiškiai nurodyta, kad naudojama dešiniarankė koordinačių sistema? Išsiaiškinkime.


Ryžiai. 2. Koordinačių sistemos

Kaip matyti iš fig. 2 koordinačių sistemos skiriasi tik ašies kryptimi Z. „OpenGL 1.0“ naudoja dešiniarankio vartotojo koordinačių sistemą. Tačiau CVV koordinačių sistema ir vartotojo koordinačių sistema yra du visiškai skirtingi dalykai. Be to, nuo 3.3 versijos nebėra tokio dalyko kaip standartinė sistema OpenGL koordinatės. Kaip minėta anksčiau, pats programuotojas diegia matricos operacijų modulį. Sukimosi matricų formavimas, projekcinių matricų formavimas, atvirkštinės matricos paieška, matricos daugyba minimalus rinkinys operacijos, įtrauktos į matricos operacijų modulį. Kyla du logiški klausimai. Jei matomumo tūris yra kubas, kurio briaunos ilgis lygus dviem, tai kodėl ekrane matoma kelių tūkstančių vienetų dydžio scena? Kuriame taške vartotojo koordinačių sistema konvertuojama į CVV koordinačių sistemą? Projekcinės matricos yra būtent tas dalykas, kuris sprendžia šiuos klausimus.

Pagrindinė to, kas pasakyta, mintis yra ta, kad pats kūrėjas gali laisvai pasirinkti vartotojo koordinačių sistemos tipą ir turi teisingai aprašyti projekcijų matricas. Tai užbaigia faktus apie OpenGL ir laikas viską sujungti.

Viena iš labiausiai paplitusių ir sunkiausiai suprantamų matricų yra perspektyvinės transformacijos matrica. Taigi kaip tai susiję su CVV ir vartotojo koordinačių sistema? Kodėl objektai mažėja, kai jų atstumas nuo stebėtojo didėja? Norėdami suprasti, kodėl objektai mažėja didėjant atstumui, pažvelkime į matricos transformacijas trimatis modelisžingsnis po žingsnio. Ne paslaptis, kad bet kurį trimatį modelį sudaro baigtinis viršūnių sąrašas, kurios visiškai nepriklausomai viena nuo kitos yra transformuojamos. Norėdami nustatyti trimatės viršūnės koordinatę dvimačio monitoriaus ekrane, turite:

  1. Konvertuoti Dekarto koordinatę į vienalytę koordinatę;
  2. Padauginkite homogeninę koordinatę iš modelio matricos;
  3. Rezultatas padauginamas iš peržiūros matricos;
  4. Gautą rezultatą padauginkite iš projekcijos matricos;
  5. Konvertuokite rezultatą iš homogeninių koordinačių į Dekarto koordinates.
Dekarto koordinačių konvertavimas į vienarūšes koordinates buvo aptartas anksčiau. Geometrinė reikšmė modelio matrica yra perkelti modelį iš vietinės koordinačių sistemos į pasaulinę koordinačių sistemą. Arba, kaip sakoma, perkelkite viršūnes iš modelio erdvės į pasaulio erdvę. Paprasčiau tariant, trimatis objektas, įkeltas iš failo, yra modelio erdvėje, kur matuojamos koordinatės paties objekto atžvilgiu. Toliau, naudojant modelio matricą, modelis išdėstomas, keičiamas mastelis ir pasukamas. Dėl to visos 3D modelio viršūnės gauna faktines vienarūšes koordinates 3D scenoje. Modelinė erdvė pasaulio erdvės atžvilgiu yra lokali. Iš modelio erdvės koordinatės perkeliamos į pasaulio erdvę (iš lokalios į globalią). Šiuo tikslu naudojama modelio matrica.

Dabar pereikime prie trečio žingsnio. Čia atsiranda vaizdo erdvė. Šioje erdvėje koordinatės matuojamos atsižvelgiant į stebėtojo padėtį ir orientaciją, tarsi jis būtų pasaulio centras. Vaizdo erdvė yra lokali pasaulio erdvės atžvilgiu, todėl koordinates reikia įvesti į ją (o ne išimti, kaip ankstesniu atveju). Tiesioginis matricos transformacija pašalina koordinates iš tam tikros vietos. Norint, priešingai, juos įvesti į ją, reikia invertuoti matricos transformaciją, todėl tipo transformacija aprašoma atvirkštine matrica. Kaip tai gauti atvirkštinė matrica? Pirma, gaukime tiesioginio stebėtojo matricą. Kas būdinga stebėtojui? Stebėtojas apibūdinamas koordinatėmis, kuriose jis yra, ir žiūrėjimo krypties vektoriais. Stebėtojas visada žiūri savo lokalios ašies kryptimi Z. Stebėtojas gali judėti scenoje ir suktis. Daugeliu atžvilgių tai primena modelio matricos reikšmę. Apskritai, taip yra. Tačiau stebėtojui mastelio keitimo operacija yra beprasmė, todėl tarp stebėtojo modelio matricos ir modelio matricos trimatis objektas Negalite dėti lygybės ženklo. Stebėtojo modelio matrica yra norima tiesioginė matrica. Invertuodami šią matricą, gauname vaizdo matricą. Praktiškai tai reiškia, kad visos globalių vienarūšių koordinačių viršūnės gaus naujas vienarūšes koordinates stebėtojo atžvilgiu. Atitinkamai, jei stebėtojas matė tam tikrą viršūnę, tada vienalytės koordinatės reikšmė z tam tikros viršūnės vaizdo erdvėje tikrai bus teigiamas skaičius. Jei viršūnė buvo už stebėtojo, tada jos vienalytės koordinatės reikšmė z erdvėje tikrai bus neigiamas skaičius.

Ketvirtas žingsnis yra labiausiai įdomus žingsnis. Ankstesni veiksmai buvo taip išsamiai aptarti sąmoningai, kad skaitytojas turėtų pilnas vaizdas apie visus ketvirtojo žingsnio operandus. Ketvirtajame žingsnyje vienarūšės koordinatės perkeliamos iš peržiūros erdvės į CVV erdvę. Dar kartą pabrėžiamas faktas, kad visos potencialiai matomos viršūnės turės teigiamą vienalytės koordinatės reikšmę z.

Apsvarstykite formos matricą:

Ir nurodykite vienalytė erdvė stebėtojas:

Padauginkime homogeninę koordinatę iš nagrinėjamos matricos:

Paverskime gautas vienarūšes koordinates į Dekarto koordinates:

Tarkime, kad erdvėje yra du taškai su tomis pačiomis koordinatėmis x Ir y, bet su skirtingomis koordinatėmis z. Kitaip tariant, vienas iš taškų atsilieka nuo kito. Dėl perspektyvos iškraipymo stebėtojas turi matyti abu taškus. Iš tikrųjų iš formulės aišku, kad dėl padalijimo iš koordinatės z, suspaudimas įvyksta iki pradžios taško. Kaip daugiau vertės z(kuo toliau taškas yra nuo stebėtojo), tuo stipresnis suspaudimas. Tai yra perspektyvinio efekto paaiškinimas.

OpenGL specifikacija teigia, kad karpymo ir rastravimo operacijos atliekamos Dekarto koordinatėmis, o vienarūšių koordinačių konvertavimo į Dekarto koordinates procesas atliekamas automatiškai.

Matrica (1) yra perspektyvinės projekcijos matricos šablonas. Kaip minėta anksčiau, projekcijos matricos užduotis susideda iš dviejų taškų: vartotojo koordinačių sistemos nustatymo (kairiarankių arba dešiniarankių), stebėtojo matomumo apimties perkėlimo į CVV. Išveskime kairiarankio vartotojo koordinačių sistemos perspektyvinę matricą.

Projekcijos matricą galima apibūdinti naudojant keturis parametrus (3 pav.):

  • Žiūrėjimo kampas radianais ( fovy);
  • Krašto santykis ( aspektas);
  • Atstumas iki artimiausios kirpimo plokštumos ( n);
  • Atstumas iki tolimosios kirpimo plokštumos ( f).


Ryžiai. 3. Perspektyvinis matomumo tūris

Panagrinėkime taško projekciją stebėtojo erdvėje į priekinį perspektyvinio matomumo tūrio ribą. Siekiant didesnio aiškumo, pav. 4 parodytas vaizdas iš šono. Taip pat reikia atsižvelgti į tai, kad vartotojo koordinačių sistema sutampa su CVV koordinačių sistema, tai yra, visur naudojama kairioji koordinačių sistema.


Ryžiai. 4. Projekcija savavališkas taškas

Remiantis savybėmis panašūs trikampiai galioja šios lygybės:

Išreikškime yꞌ ir xꞌ:

Iš esmės projekcijų taškų koordinatėms gauti pakanka išraiškų (2). Tačiau norint tinkamai ekranuoti trimačius objektus, reikia žinoti kiekvieno fragmento gylį. Kitaip tariant, būtina išsaugoti komponento vertę z. Tai vertė, naudojama OpenGL gylio testams. Fig. 3 aišku, kad vertė zꞌ netinka kaip fragmento gylis, nes gali visos taško projekcijos ta pati vertė zꞌ. Išeitis iš šios situacijos – pasitelkti vadinamąjį pseudogylį.

Pseudo-gylio savybės:

  1. Pseudogylis apskaičiuojamas pagal vertę z;
  2. Kuo taškas arčiau stebėtojo, tuo pseudodeptas turi mažesnę vertę;
  3. Visų taškų, esančių priekinėje matomumo tūrio plokštumoje, pseudogylio reikšmė yra -1;
  4. Visų taškų, esančių tolimojoje matomumo tūrio pjovimo plokštumoje, pseudogylio reikšmė yra 1;
  5. Visų matomumo tūrio viduje esančių fragmentų pseudogylio reikšmė yra intervale [-1 1].
Išveskime formulę, pagal kurią bus skaičiuojamas pseudogylis. Paimkime šią išraišką kaip pagrindą:

Šansai a Ir b reikia paskaičiuoti. Tam pasitelkiame 3 ir 4 pseudogylių savybes. Gauname dviejų lygčių su dviem nežinomaisiais sistemą:

Sudėkime abi sistemos dalis ir gautą rezultatą padauginkime iš sandaugos fn, kuriame f Ir n negali būti lygus nuliui. Mes gauname:

Atidarykime skliaustus ir perdėkime terminus taip, kad tik dalis su A, o dešinėje tik su b:

Pakeiskime (6) į (5). Paverskime išraišką į paprastą trupmeną:

Padauginkite abi puses iš -2fn, kuriame f Ir n negali būti lygus nuliui. Pateikime panašius, pertvarkykime terminus ir išreikškime b:

Pakeiskime (7) į (6) ir išreikškime a:

Atitinkamai komponentai a Ir b yra lygūs:

Dabar pakeiskime gautus koeficientus į ruošinio matricą (1) ir pažiūrėkime, kas atsitiks su koordinate z savavališkam taškui stebėtojo vienalytėje erdvėje. Pakeitimas atliekamas taip:

Tegul atstumas iki priekinės pjovimo plokštumos n yra lygus 2, o atstumas iki tolimosios kirpimo plokštumos f lygus 10. Apsvarstykite penkis taškus stebėtojo vienalytėje erdvėje:

Abipusis susitarimas matomumo taškai ir apimtis
Taškas Reikšmė apibūdinimas
1 1 Taškas yra priešais matomumo apimties priekinę pjovimo plokštumą. Nepraleidžia rastrizacijos.
2 2 Taškas yra matomumo garsumo ribos priekiniame krašte. Vykdoma rastracija.
3 5 Taškas yra tarp priekinio kirpimo krašto ir tolimojo matomumo apimties nukirpimo krašto. Vykdoma rastracija.
4 10 Taškas yra tolimajame matomumo garsumo ribos krašte. Vykdoma rastracija.
5 20 Taškas yra už tolimojo matomumo garsumo ribos krašto. Nepraleidžia rastrizacijos.

Padauginkime visus taškus iš matricos (8), o gautas vienarūšes koordinates paverskime į Dekarto koordinatės . Norėdami tai padaryti, turime apskaičiuoti naujų vienarūšių komponentų vertes Ir .
1 punktas:

Atkreipkite dėmesį, kad vienalytė koordinatė absoliučiai teisingai išdėstyta CVV, o svarbiausia, dabar galima atlikti OpenGL gylio testą, nes pseudogylis visiškai atitinka testo reikalavimus.

Su koordinatėmis z Supratome, pereikime prie koordinačių x Ir y. Kaip minėta anksčiau, viskas daug žadantis tūris matomumas turi tilpti į CVV. CVV krašto ilgis yra du. Atitinkamai, perspektyvinio matomumo tūrio aukštis ir plotis turi būti suspausti iki dviejų įprastinių vienetų.

Mes turime kampelį fovy ir dydis aspektas. Išreikškime aukštį ir plotį naudodami šias reikšmes.


Ryžiai. 5. Matomumo apimtis

Iš pav. 5 aišku, kad:

Dabar galime gauti galutinį perspektyvinės projekcijos matricos vaizdą pasirinktai kairiarankei koordinačių sistemai, veikiančiai su CVV OpenGL:

Tai užbaigia matricų išvedimą.

Keletas žodžių apie „DirectX“ – pagrindinį „OpenGL“ konkurentą. DirectX nuo OpenGL skiriasi tik CVV matmenimis ir jo padėtimi. „DirectX“ CVV yra stačiakampis su ašiniais ilgiais x Ir y lygus dviem, ir išilgai ašies z ilgis lygus vienetui. diapazonas x Ir y yra [-1 1], o diapazonas z lygus . Kalbant apie CVV koordinačių sistemą, „DirectX“, kaip ir „OpenGL“, naudoja kairiąją koordinačių sistemą.

Norėdami parodyti pasirinktinės dešiniarankės koordinačių sistemos perspektyvines matricas, turite perbraižyti Fig. 2, 3 ir 4 pav., atsižvelgiant į naują ašies kryptį Z. Tolesni skaičiavimai yra visiškai panašūs, iki ženklo. „DirectX“ matricoms 3 ir 4 pseudo-gylio savybės yra modifikuojamos, kad atitiktų diapazoną.

Šiuo metu perspektyvių matricų temą galima laikyti uždaryta.

Šiandien atidžiau pažvelgsime į virtualios kameros įrenginį. Pradėkime nuo paveikslėlio.

Paveiksle matome kameros koordinačių erdvę. Kameros kryptis („žiūrėjimas“) visada sutampa su teigiama z ašies kryptimi, o pati kamera yra pradinėje vietoje.

Paveikslėlyje parodyta piramidės vidinė erdvė yra ta virtualaus pasaulio dalis, kurią matys vartotojas.

Atkreipkite dėmesį į tris plokštumus. Pirmasis yra 1 atstumu išilgai z ašies. Tai artimiausias lėktuvas. Žaidėjas niekada nepamatys to, kas yra prieš jį. IN tokiu atveju z reikšmė lygi vienetui, bet paprastai ji gali būti bet kokia. Vienas grafinio ekrano defektas yra susijęs su artimąja plokštuma. Šis trūkumas pirmiausia pasireiškia šauliuose (dėl didelė laisvė fotoaparatai). Kai priartėsite prie objekto per arti, galite atsidurti „viduje“. Iš naujausi žaidimaiŠis defektas ypač išryškėjo Left 4 dead: kai ant grotuvo krisdavo zombių minia, labai dažnai būdavo galima pažvelgti į kitų veikėjų vidų.

Plokštuma, esanti 100 vienetų atstumu išilgai z ašies, vadinama tolimąja plokštuma. Vėlgi, vertė gali būti savavališka. Vartotojas niekada nematys objektų, esančių toliau nei ši plokštuma.

Šešios plokštumos, ribojančios erdvę, kurią matys vartotojas, vadinamos iškirpimo plokštumos: kairė, dešinė, viršutinė, apatinė, artima ir toli.

Plokštuma, esanti tarp artimo ir tolimojo, yra projekcija. Toliau šią plokštumą pastatysime ties z=1, t.y. jis sutaps su artimiausiu. Čia atskyriau artimąją ir projekcinę plokštumas, kad parodyčiau, jog jos nėra tas pats dalykas. Projekcijos plokštuma skirta paskutinei koordinačių transformacijai: transformacijai iš trimatė erdvė kameros – į dvimatę erdvę.

Būtent projekcijos plokštumos dėka vartotojas matys Virtualus pasaulis. Tiesą sakant, ši plokštuma yra tai, ką vartotojas matys. Projekcijos plokštuma yra tiesiogiai susijusi su tokiomis sąvokomis kaip priekinio plano / fono buferiai, programos langas ir vartotojo ekranas. Visos šios sąvokos gali būti laikomos stačiakampiu paveikslėliu, kuris kompiuterio atmintyje vaizduojamas skaičių masyvu.

Paversti koordinates iš trimačio pasaulio į projekcijos plokštumą yra sunkiausia Šis momentas buvome studijuoti.

Matymo laukas / matymo sritis

Aukščiau pateiktame paveikslėlyje projekcijos plokštuma (taigi ir vaizdas, kurį matys vartotojas) yra pločio daugiau aukščio. Projekcijos plokštumos plotis ir aukštis nurodomi naudojant kampus. Susitikti skirtingi vardaišie kampai: matymo laukas arba žiūrėjimo sritis. Anglų kalba – matymo laukai.

Žiūrėjimo sritys nurodomos dviem kampais. Pavadinkime juos: fovx – horizontali žiūrėjimo zona, fovy – vertikali žiūrėjimo zona. Išsami informacija apie žiūrėjimo sritis: žemiau.

Z-buferis / w-buferis / gylio buferis (z-buferis / w-buferis / gylio buferis)

Pažiūrėkime į paveikslėlį, kuriame pavaizduoti du trikampiai: 25 ir 50 vienetų atstumu nuo fotoaparato. (a) paveiksle pavaizduota trikampių vieta erdvėje (vaizdas iš viršaus), o (b) paveiksle – galutinis vaizdas:

Kaip galima numanyti, vaizdą reikia piešti pradedant nuo tolimiausių elementų ir baigiant artimiausiais. Akivaizdus sprendimas yra apskaičiuoti atstumą nuo pradžios (nuo fotoaparato) iki kiekvieno objekto ir tada palyginti. Kompiuterinėje grafikoje naudojamas kiek pažangesnis mechanizmas. Šis mechanizmas turi kelis pavadinimus: z-buffer, w-buffer, gylio buferis. Z-buferio dydis elementų skaičiaus atžvilgiu yra toks pat kaip fono ir pagrindinių buferių dydis. Arčiausiai fotoaparato esančio objekto z komponentas įvedamas į z buferį. Šiame pavyzdyje, kur mėlynas trikampis sutampa su žaliu trikampiu, mėlynos spalvos z koordinatės bus įvestos į gylio buferį. Išsamiau apie z-buferius kalbėsime atskiroje pamokoje.

Ortografinė / lygiagreti projekcija

Operacija, kurios metu erdvės matmuo mažėja (buvo trimatė erdvė, ji tapo dvimatė), vadinama projekcija. Pirmiausia mus domina perspektyvinė projekcija, bet pirmiausia susipažinsime su lygiagrečia (lygiagrečia arba ortografine projekcija).

Norint apskaičiuoti lygiagrečią projekciją, pakanka atmesti papildomą koordinatę. Jei erdvėje turime tašką [ 3 3 3 ], tai su lygiagrečia projekcija į plokštumą z=1, jis bus projektuojamas į tašką .

Perspektyvinė projekcija į projekcijos plokštumą

Tokio tipo projekcijoje visos tiesės susilieja viename taške. Būtent taip veikia mūsų vizija. Ir būtent perspektyvinės projekcijos pagalba modeliuojama „išvaizda“ visuose žaidimuose.


Palyginkite šį paveikslėlį su paveikslėliu, kuriame pavaizduotos vienalytės ankstesnės pamokos koordinatės. Norint pereiti iš trimatės erdvės į dvimatę erdvę, pirmąsias dvi vektorių komponentes reikia padalyti iš trečiosios: [ x/z y/z z/z ] = [ x/z y/z 1 ].

Kaip rašiau aukščiau, projekcinė plokštuma gali būti bet kur tarp arti ir toli. Mes visada pastatysime projekcijos plokštumą ties z=1, tačiau šioje pamokoje apžvelgsime kitas parinktis. Pažiūrėkime į paveikslėlį:


Atstumą iki projekcijos plokštumos nuo koordinačių pradžios pažymėkime d. Nagrinėsime du atvejus: d=1 ir d=5. Svarbus punktas: trečioji visų vektorių dedamoji po projekcijos turi būti lygi d - visi taškai yra toje pačioje plokštumoje z=d. Tai galima pasiekti visus vektoriaus komponentus padauginus iš d: [ xd/z yd/z zd/z ]. Su d=1 gauname: [ x/z y/z 1 ], tai formulė, kuri buvo naudojama vienarūšėms koordinatėms transformuoti.

Dabar, jei projekcijos plokštumą perkeltume į tašką z=5 (atitinkamai d=5), gautume: [ xd/z yd/z zd/z ] = [ 5x/z 5y/z 5 ]. Paskutinė formulė projektuoja visus erdvės vektorius į vieną plokštumą, kur d=5.
Čia turime mažą problemą. Ankstesnė formulė veikia su trimačiais vektoriais. Bet sutarėme naudoti 4D vektoriai. Ketvirtasis komponentas šiuo atveju gali būti tiesiog išmestas. Bet mes to nedarysime, nes jo naudojimas suteikia tam tikrų specifinių galimybių, kurias aptarsime vėliau.

Reikia surasti bendras daliklis trečiasis ir ketvirtasis komponentai, padalijus iš kurių d reikšmė išlieka trečiajame komponente, o vienybė ketvirtajame. Šis daliklis yra d/z. Dabar iš įprasto vektoriaus [ x y z 1 ] turime gauti vektorių, paruoštą projekcijai (dalybai) [ x y z z/d ]. Tai atliekama naudojant transformacijos matricą (patikrinkite rezultatą padaugindami bet kurį vektorių iš šios matricos):


Paskutinė transformacija dar nėra projekcija. Čia mes tiesiog sumažiname visus vektorius iki mums reikalingos formos. Priminsiu, kad projekcijos plokštumą pastatysime ties d=1, vadinasi, vektoriai atrodys taip: [ x y z z ].

Perspektyvinės transformacijos matrica

Pažiūrėsime į perspektyvos transformacijos matricą, naudojamą DirectX:

Dabar mes žinome, kam yra skirtas elementas _34. Taip pat žinome, kad elementai _11 ir _22 padidina vaizdo mastelį horizontaliai ir vertikaliai. Pažiūrėkime, kas tiksliai slepiasi už pavadinimų xScale ir yScale.

Šie kintamieji priklauso nuo žiūrėjimo sričių, kurias aptarėme aukščiau. Didindami arba mažindami šiuos kampus, galite pakeisti vaizdą (mastelį arba priartinti) – pakeisti projekcijos plokštumos dydį ir kraštinių santykį. Priartinimo mechanizmas miglotai primena kamerų/kamerų priartinimą – principas labai panašus. Pažiūrėkime į paveikslėlį:


Padalinkime kampą fov į dvi dalis ir apsvarstykime tik vieną pusę. Ką mes matome čia: padidindami kampą fov/2 (ir atitinkamai kampą fov), padidiname kampo nuodėmę ir sumažiname cos. Tai padidina projekcijos plokštumą ir atitinkamai sumažina projektuojamų objektų skaičių. Idealus kampas mums būtų fov/2 = P/4. Leiskite jums priminti, kad kampas P/4 radianais yra lygus 45 laipsnių. Šiuo atveju fov bus lygus 90 laipsnių. Kodėl mums tinka 45 laipsnių kampas? Šiuo atveju mastelio keitimo nėra, o cos(P/4)/sin(P/4)=1.

Dabar galime lengvai pakeisti vaizdo mastelį vertikaliai (horizontaliai), naudodami pusės žiūrėjimo ploto sinusus ir kosinusus (kotangento funkcija C++ kalboje vadinama cot):

yScale = cos(fovY/2)/sin(fovY/2) = cot(fovY/2)
„DirectX“ naudoja tik vertikalų matymo lauką (fovY), o horizontalus mastelio keitimas priklauso nuo vertikali zona vaizdas ir kraštinių santykis.

Priminsiu, kad mūsų programų langas yra 500x500 dydžio. Kraštinių santykis: nuo 1 iki 1. Todėl kintamieji bus lygūs: xScale=1, yScale=1.

Standartinis monitoriaus/televizoriaus formato santykis: 4:3. Šis santykis atitinka ekrano skiriamąją gebą: 640x480, 800x600, 1600x1200. Viso ekrano režimo dar neliesime, bet galime pakeisti programos lango dydį. Galite pakeisti lango dydį (esamuose parametruose), pavyzdžiui, į 640x480. Bet kad visi objektai nebūtų ištempti (kvadratai atrodys kaip stačiakampiai), nepamirškite pakeisti atitinkamų kintamųjų projekcijos matricoje.

Aš beveik pamiršau, forumas xScale „DirectX“:

xScale = yMastelis / formato santykis
Kraštinių santykiai nustatomi paprastai: 1/1, 4/3, 16/9 – tai standartiniai.

Belieka išsiaiškinti perspektyvinės transformacijos matricos elementų _33, _34 paskirtį. zf yra tolimosios plokštumos z koordinatė (iš toli - toli), o zn yra artimos plokštumos z koordinatė (iš arti - arti). Atkreipkite dėmesį, kad elementas _43 = _33 * -zn.

Lengviausias būdas tiksliai suprasti, ką šios formulės veikia, yra pavyzdžiai. Standartinį vektorių [ x y z w ] padauginkime iš aukščiau pateiktos matricos. Rekomenduoju tai padaryti paėmus popieriaus lapą ir pieštuką (tikiuosi prisiminsite, kaip padauginti dvi matricas). Vektoriaus komponentai bus tokios formos.

1 = x*xSkalė
2 = y*ySkalė
3-ioji = z*(zf/(zf-zn)) + w*(-(zn*zf)/(zf-zn)) = (zf/(zf-zn))*(z – w*zn)
4-oji = (w*z)/d
Atlikime projekcijos transformaciją (visus elementus padalijame į 4-ąjį komponentą ir darome prielaidą, kad d=1 ir w=1):

1-oji = (d*x*xmastelė)/(w*z) = (x*xskalė)/z
2-oji = (d*y*yScale)/(w*z) = (y*xScale)/z
3 = (zf/(zf-zn))*(z – w*zn)*(w*d/z) = (zf/(zf-zn))*(1 – zn/z)
4 = 1
Dėl to mes gavome formos vektorių:

[ x/(z*xScale) y/(z*yScale) (zf/(zf-zn))*(1-zn/z) 1 ]
Dabar, jei nurodysite konkrečias zf ir zn reikšmes, rasite šiuos dalykus (skirta teigiamas vertes): jei vektorius yra prieš artimiausią plokštumą, tai z komponentas po transformacijos bus mažiau nei nulis, jei vektorius yra už tolimosios plokštumos, tada z komponentas bus didesnis už vienetą.

Nėra skirtumo, kur tiksliai yra artimos ir tolimosios plokštumos: zn=1, zf=10 arba zn=10, ir zf=100 (ar bet kokios kitos reikšmės) – po transformacijos matoma sritis atsidurs intervale nuo nulio iki vieno, imtinai.

Būtent tam skirtos formulės projekcinės matricos elementuose _33, _34 - projektuoti atstumą nuo artimos iki tolimos plokštumos į atkarpą. Patikrinkite tai apskaičiuodami kelių vektorių reikšmes konkrečios vertės zn,zf (taip, ant popieriaus!!!).



Ar jums patiko straipsnis? Pasidalinkite su draugais!