Aproape toate văzut imaginea stereo, de exemplu, îmi amintesc în școală am avut notebook-uri de pe coperta, care au fost tipărite mâzgăleli de neînțeles. Dar dacă te uiți la ele „dreapta“ - aceste mâzgăliturile câștiga volum. Nu toate ajunge pentru a le vedea dintr-o dată, cărora le-a fost ușor, dar care nu a putut. Există mai multe recomandări privind modul de a realiza iluzia de volum: a se vedea „prin“ imaginea sau să-l aproape de nas și se retrage apoi treptat.
Cum percep oamenii de volum? Cu cât obiectul în cauză este, cu atât mai mult observatorul „reduce“ ochii. astfel în cazul în care obiectul în cauză este situat la o distanță infinită departe, ochii se va uita la el „în paralel“.
Acum, ia în considerare modul de a realiza iluzia de volum de pe o imagine plană. Deci, avem un om cu doi ochi (Figura 1): ochiul stâng și drept O1 O2, precum și planul de proiecție a imaginilor stereo D1 D2. Lăsați obiectul în cauză B este situat la o distanță h de observator. Apoi, în scopul de a „vedea“ el în imaginea de care aveți nevoie pentru a se potrivi figura în punctele B1 și B2. Se pare că suntem păstrarea la un model plat si arata ca si cum „prin“ ea. Ochiul stâng vede punctul B1. B2 pe dreapta. Imagine pentru ei pe o foaie de același lucru și de a crea iluzia că vom vedea de fapt, obiectul B. Se află în spatele planului plăcii. astfel mai mare distanța dintre punctele B1 și B2, în care aceeași imagine, „mai departe“ obiect B. perceput
Acum obținem o pereche de formule de calcul, care vor fi utile pentru redarea unei imagini stereo. Să presupunem că o - distanța dintre ochi, H - distanța maximă la un obiect la distanță, h - distanța de h_max obiect - distanța maximă față de obiect la distanță față de planul de proiecție a imaginii stereo. Din similitudinea triunghiuri BB1 B2 și BO1 O2 trebuie B1 B2 / BE = O1 O2 / BF. B1 B2 = d. O1 O2 = a. BF = h. BE = BF-EF. EF = AF-AE = H-h_max. BE = h- (H-h_max). d total / (h-H + h_max)) = a / h.
Poate că teoria destul de mult, puteți merge la practica. Veți avea nevoie de Photoshop și 3dsMax. În Photoshop creează o textură din care mai târziu va fi construit imaginea stereo. Câteva recomandări: mai multe detalii cu privire la textura, cu atât mai bine pentru a obține versiunea finală (cu monofonic nu primesc nimic); înălțimea texturii trebuie să se potrivească cu înălțimea imaginii (care este motivul pentru care este necesar să se determine imediat dimensiunea finală a imaginii stereo); iar lățimea depinde în cazul în care aveți de gând să folosească imaginea furnizată. Fig.1 Valoarea d_max corespunde exact lățimii texturii, astfel încât, în realitate (pe ecran sau după tipărire) nu trebuie să depășească distanța dintre ochii unui. B este în textura originală, rezultatul final o mai bună calitate este de a transforma, în același timp, mai mulți pixeli în lățime. Am textura:
Lățimea sa este de 100 de pixeli și înălțimea de 600 (în cele din urmă înainte de a primi dimensiunea stereo 800 de imagine 600 pixeli). Cu toate că este mai bine să-l facă astfel încât ea dale pe orizontală. Apoi, creați sau deschideți orice MAX'e 3D-obiect. Am folosit acest model pentru a viespile:
Pentru rezultatul nu va fi util orice materiale sau renderers terță parte sau de surse de lumină. Deci, dacă toate acestea sunt disponibile în scenă, atunci vom atribui toate materialele standard elimina toate sursele de lumină și de a utiliza opțiunea prestabilită scanline Renderer. Acum puteți începe să scrie scenariul. Pentru a face acest lucru, selectați meniul MAX'a MAXScript -> Script nou și fereastra de editare script-ul se deschide. script-ul nostru va avea propria sa interfață. Acest lucru se poate face în două moduri: pe panoul Utilites sau într-o fereastră separată. Am ales prima opțiune și de a crea un nou utilitar script:
utilitate stereoImg "Image Stereo"
-- crearea de imagini stereo de utilitate
Deci, lista de elemente necesare: două grupuri de textură și Render. În grupul Texture are o etichetă, care va afișa informații despre textura, și un buton care lansează un dialog deschis fișier cu textura. În Render grupul - Spinner (renderer determină lățimea), eticheta (informații cu privire la înălțimea de redare), Spinner (imagine stereo de calitate), bara de progres, butonul de selectare obiect și butonul „cel mai important“ pentru a rula script-uri pe o eroare de calcul. În acest scop, corpul de utilitate trebuie să adăugați următoarele linii:
fn fltr_cam obj = superClassOf obj == camera - returnează true dacă obj camera (pentru filtru de selecție)
etichetă l_T_img „textură“ - informații cu privire la dimensiunea
Butonul b_T_img „bitmap textura Load“ - încărcare textura
Eticheta l_R_h „înălțime: 0“ - înălțimea
spinner s_R_prec "calitatea imaginii stereo" rază de acțiune: [1, 10, 4] Tip: Lățime #integer: 80 align: #right - imagine stereo de calitate
ProgressBar Valoarea prb_R_status: 0 - face progrese
pickbutton pb_R_cam "Pick camera" filtru: fltr_cam peste: 2 - Selectarea camerei
Butonul b_R_stereo "
La început, utilitatea corpului (înainte de a descrie elementele personalizate) definesc variabilele locale necesare pentru a crea o imagine stereo:
-- definirea variabilelor locale
locale latime, inaltime, d_max - lățimea și înălțimea de redare, lățimea texturii
Rămâne să se înregistreze manipulare eveniment pe elementele interfeței cu utilizatorul. Descrierile toate evenimentele sunt după cum urmează: pe<имя элемента> <название события> <список аргументов>do (<обработка события>). Pentru a începe, vom descrie comportamentul MAX'a la apăsarea butonului de încărcare textura. Ce ar trebui să se întâmple: deschide caseta de dialog de selectare a fișierului, după ce selectați fișierul textura este încărcat în MAX, afișate sub formă de informații cu privire la dimensiunea și textura numelui său, apoi inițiat de variabile locale și configurați setările globale pentru redare.
Tipuri de T_file_name = getOpenFileName: "bitmap (* bmp.) | * .bmp" - un dialog pentru deschiderea fișierului
b_T_img.caption = filenameFromPath T_file_name - buton de pe numele de fișier al imaginii
d_max = T_img.width - actualizează toate variabilele locale
width = 4 * înălțime / 3 ca Integer - determinare pentru a face lățimea, eventual transformat 3: 4
s_R_w.value = lățimea - afișarea informațiilor despre rezoluția de redare
renderWidth = lățimea - de redare a configura setările globale (lățime, înălțime)
Noi determina forma pe care dorim să obțineți pe imaginea stereo. Pentru aceasta avem nevoie de aparatul de fotografiat. În cazul în care scena au deja camere cu punctul de vedere „dreapta“ - excelent, le puteți utiliza. Dacă nu, atunci trebuie să creați camera. Cel mai simplu mod de a merge la vizualizarea perspectivă, în cazul în care selectați unghiul dorit. După aceea a crea o camera de tipul: Creare Meniu principal -> Camere -> CreateCameraFromView sau Crtl + C. Recall teorie, există parametri, cum ar fi H - distanța maximă la obiect la distanță și h_max - distanța de la planul de proiecție pentru a maximiza obiectul la distanță. Deci, ca să nu le introduceți manual, le vom scoate din proprietățile camerei, și anume Clipping Avioane. Selectați camera dorită de pe panoul Modificare dezvăluie Parametrii de defilare. a pus o bifă lângă Clip manual. Rămâne doar pentru a ajusta Clip Apropiat și Îndepărtat Clip. Clip plan Aproape corespunde proiecția planului imagine stereo, iar clipul Far - distanța până la cel mai îndepărtat obiect. Recomandări: obiecte, care vor fi construite imaginea stereo trebuie să fie plasat între Clip Far și Clip Apropiat. Clip Aproape este de aproximativ jumătate din Clip Far. facilități ar trebui să fie situate departe de Clip Apropiat și aproape de Clip Far. Cu toate că acest lucru poate fi luată în considerare și experiment cu Planes tăiere. pentru a obține un rezultat dorit. astfel un fel de înființat, la stânga pentru a „explica“ script-ul pe care o vom lucra cu acest aparat foto, acest lucru se va scrie handler apăsând butonul de selectare camerei:
pb_R_cam.caption = pb_R_cam.object.name - buton de pe numele camerei
-- modificări de prelucrare a face lățime
Rămâne să se ocupe de ultimul eveniment - Prin apăsarea butonului „cea mai importantă“. Din nou teorie va lua pe baza formulei obținute anterior: d / (h-H + h_max)) = a / h. Aici o. H și h_max - Constant. Ultimele două avioane poluchayutsya Clipping de pe aparat. Definim o. această valoare substitut h în loc de H - un caz extrem, atunci când un obiect aflat la o distanță maximă. Prin urmare, a = d_max * H / h_max. Formula finală este: d = a * (h-H + h_max) / h - se calculează distanța dintre punctele d. imagini în care aceeași, în scopul de a crea iluzia că obiectul este situat la o distanță h de observator.
-- calculul greșit al imaginii stereo
DOF_img = face camera: pb_R_cam.object outputwidth: lățime outputheight: canale de înălțime: # (#zDepth)
-- crearea bitmap-uri pentru viitorul imaginii stereo
-- umplere prima bandă textura
afișa OUT_img - deschide fereastra cu imaginea stereo finală
Apoi, adâncimea canalului este linia de scanat (cu verificarea faptului că distanța nu a depășit camera Clip Far). Pe baza acestei valori h (script dist) și formula obținut distanța calculată anterior între pixelii repetabile. Astfel merge construirea imaginii stereo, progresul de-a lungul mod de calcul este actualizat. În final, ecranul afiseaza rezultatul final (Figura 7).
Mai jos este o listă completă a utilitarului script cu unele îmbunătățiri:
utilitate stereoImg "Image Stereo"
-- crearea de imagini stereo de utilitate
-- definirea variabilelor locale
locale latime, inaltime, d_max - lățimea și înălțimea de redare, lățimea texturii
fn fltr_cam obj = superClassOf obj == camera - returnează true dacă obj camera (pentru filtru de selecție)
etichetă l_T_img „textură“ - informații cu privire la dimensiunea
Butonul b_T_img „bitmap textura Load“ - încărcare textura
Eticheta l_R_h „înălțime: 0“ - înălțimea
spinner s_R_prec "calitatea imaginii stereo" rază de acțiune: [1, 10, 4] Tip: Lățime #integer: 80 align: #right - imagine stereo de calitate
ProgressBar Valoarea prb_R_status: 0 - face progrese
pickbutton pb_R_cam "Pick camera" filtru: fltr_cam peste: 2 - Selectarea camerei
Butonul b_R_stereo "
Tipuri de T_file_name = getOpenFileName: "bitmap (* bmp.) | * .bmp" - un dialog pentru deschiderea fișierului
b_T_img.caption = filenameFromPath T_file_name - buton de pe numele de fișier al imaginii
d_max = T_img.width - actualizează toate variabilele locale
width = 4 * înălțime / 3 ca Integer - determinare pentru a face lățimea, eventual transformat 3: 4
s_R_w.value = lățimea - afișarea informațiilor despre rezoluția de redare
renderWidth = lățimea - de redare a configura setările globale (lățime, înălțime)
prb_R_status.value = (100 * x / d_max) ca întreg - actualizarea progresul operației curente
-- de redare a imaginii „extins“ stereo
H = pb_R_cam.object.farclip - distanța de la ochi la adâncimea maximă
h_max = pb_R_cam.object.farclip - pb_R_cam.object.nearclip - distanța de la planul de proiecție pentru max. adâncime
-- linie cu linie de construcție a imaginii stereo ( „extinsă“)
-- ia de la redarea de adâncime departe de camera la cel mai apropiat punct (aici, de asemenea, există o netezire liniară)
-- primirea, imagine „normală“ stereo „extins“
FIN_img = bitmap (latime + d_max) de culoare înălțime: negru - crearea bitmap-uri pentru imaginea stereo finală
afișa FIN_img - deschide fereastra cu imaginea stereo finală
Schimbarea este doar în algoritmul de calcul al imaginii stereo. Adăugați un cec „foarte simplu de manevrat“: eroare de calcul nu va începe dacă nu ați selectat textura și aparatul de fotografiat. Deci, există un algoritm, „îmbunătățit“ de calcul al imaginii stereo a fost realizat cu utilizarea unui „calitate“ spinner. Pe scurt, ceea ce este: imaginea este mai întâi liniar întinsă și eroare de calcul, de asemenea, este „întins“, iar apoi rezultatul este comprimat la dimensiunea inițială. Diferența poate fi văzută în Figura 7, Figura 8, Figura 9.
Fig.7 calitate unitate facturat și Fig.8 și Fig.9 - 4 și 8, respectiv. Desigur, cea mai mare calitate, cu atât mai mare timpul de redare.
Asta e tot. Avem acum un instrument de script-ul, care poate fi folosit de orice 3D-obiect pentru a obține o imagine stereo. Sper foarte mult că lecția a fost clar (trebuie să fie prieteni cu geometria :) și util (cel puțin pentru faptul că puteți viziona de fapt, modelul dvs. „în volum“).