🖼️ Perspective Projection & Vanishing Points
A floor grid and 3D boxes are projected onto the picture plane using real camera math, the perspective divide x_screen = f*x/z, switchable between one-, two- and three-point perspective. Vanishing points are computed analytically from each axis direction.
Podobne symulacje
🖼️ Co przedstawia
Kamera lub oko rzutuje świat 3D na płaską płaszczyznę obrazu 2D poprzez rzutowanie perspektywiczne: punkt o współrzędnych kamery (x, y, z) odwzorowuje się na współrzędne ekranu xekran = f·x/z, yekran = f·y/z, gdzie f to ogniskowa (ustalana przez pole widzenia), a z to głębokość punktu przed kamerą. Ten „podział perspektywiczny” — dzielenie przez głębokość — jest dokładnie powodem, dla którego odległe obiekty wydają się mniejsze.
Kluczowa konsekwencja: rodzina równoległych prostych w 3D dzieli jeden wektor kierunkowy, a gdy punkty przesuwają się nieskończenie daleko wzdłuż tego kierunku, ich rzutowane stosunki x/z i y/z zbiegają do jednej ustalonej wartości — punktu zbiegu prostej. Scena z krawędziami wyrównanymi wzdłuż jednej, dwóch lub trzech niezależnych osi względem kamery tworzy zatem jeden, dwa lub trzy punkty zbiegu: perspektywę jednopunktową, gdy kamera patrzy wprost na ścianę sześcianu, dwupunktową, gdy kamera jest obrócona, aby widzieć dwie boczne ściany ukośnie, oraz trójpunktową, gdy kamera jest dodatkowo przechylona w górę lub w dół, więc pionowe krawędzie też się zbiegają.
Jak korzystać
- Wybierz perspektywę jedno-, dwu- lub trójpunktową, aby obrócić siatkę sześcianu względem ustalonej kamery.
- Dostosuj Pole widzenia, aby zmienić ogniskową i wielkość zniekształcenia perspektywicznego.
- Przesuń Wysokość kamery i Odległość kamery, aby zmienić punkt widzenia.
- Przełącz linie konstrukcyjne punktu zbiegu, aby zobaczyć przerywane linie prowadzące zbiegające się w każdym punkcie zbiegu, oraz linię horyzontu, aby zobaczyć linię wysokości oczu, na której leżą wszystkie punkty zbiegu dla kierunków poziomych.
Czy wiesz, że?
Perspektywa liniowa z prawdziwymi matematycznymi punktami zbiegu została sformalizowana na początku XV wieku przez florenckiego architekta Filippa Brunelleschiego i spopularyzowana przez traktat Leona Battisty Albertiego z 1435 roku Della Pittura, zmieniając zachodnie malarstwo niemal z dnia na dzień. Wcześniej sztuka średniowieczna używała luźniejszych wskazówek przestrzennych bez jednego spójnego punktu widzenia. Ta sama matematyka podziału perspektywicznego zaimplementowana tutaj — x/z, y/z — to dokładnie operacja, którą każdy nowoczesny silnik gier 3D i renderer CAD wykonuje miliardy razy na sekundę, aby zamienić sceny 3D w obrazy 2D na ekranie.
O tej symulacji
Ten symulator rzutuje siatkę podłogi i kilka pudełek 3D na płótno za pomocą prawdziwej matematyki kamery perspektywicznej: punkty świata są przenoszone do przestrzeni kamery i dzielone przez ich głębokość (x/z, y/z), skalowane przez ogniskową wyprowadzoną z pola widzenia, dokładnie jak w prawdziwej kamerze lub rendererze 3D.
🔬 Co przedstawia
Siatka pudełek jest obracana względem ustalonej kamery, aby przełączać się między perspektywą jedno-, dwu- i trójpunktową. Punkty zbiegu są obliczane analitycznie przez rzutowanie każdego kierunku osi głównej (nie tylko próbkowanych punktów krawędzi) przez tę samą transformację kamery, która jest używana dla reszty sceny.
🎮 Jak korzystać
Wybierz tryb perspektywy, a następnie dostosuj Pole widzenia, Wysokość kamery i Odległość kamery. Przełącz linie konstrukcyjne punktu zbiegu, aby zobaczyć zbiegające się przerywane linie, oraz linię horyzontu, aby zobaczyć odniesienie na wysokości oczu, na którym leżą wszystkie punkty zbiegu kierunków poziomych.
💡 Czy wiesz, że?
Matematycznie poprawna perspektywa liniowa została sformalizowana dopiero około 1415 roku przez Filippa Brunelleschiego we Florencji — przez większość historii sztuki malarze nie mieli systematycznego sposobu na realistyczne zbieganie równoległych linii.
Najczęściej zadawane pytania
Czym jest podział perspektywiczny?
To operacja x_ekran = f·x/z, y_ekran = f·y/z, która zamienia punkt w przestrzeni kamery 3D na współrzędne ekranu 2D. Dzielenie przez głębokość z sprawia, że odległe obiekty wydają się mniejsze i jest podstawową operacją każdego rendera 3D poprawnego perspektywicznie.
Dlaczego równoległe linie wydają się spotykać w punkcie zbiegu?
Wszystkie punkty na prostej 3D dzielą jeden wektor kierunkowy. Gdy punkt przesuwa się dalej wzdłuż tego kierunku, jego stosunki x/z i y/z zbliżają się do ustalonej granicy, określonej wyłącznie przez kierunek, nie przez pozycję początkową prostej — więc każda prosta o tym kierunku, bez względu na to, gdzie się zaczyna, zbiega do tego samego punktu ekranu.
Co decyduje o tym, czy scena pokazuje 1, 2 czy 3 punkty zbiegu?
Zależy to od tego, ile głównych kierunków osi obiektu jest ukośnych (nie równoległych ani prostopadłych) względem kierunku patrzenia kamery. Kamera patrząca wprost na ścianę pudełka ma tylko jedną ukośną oś (głębokość), dając jeden punkt zbiegu; obrócenie kamery lub pudełka sprawia, że dwie osie stają się ukośne dla dwupunktowej, a przechylenie sprawia, że oś pionowa też staje się ukośna dla trójpunktowej.
Czym jest linia horyzontu?
Horyzont to linia w przestrzeni ekranu, na którą rzutuje się wysokość oczu samej kamery, ponieważ punkty na tej wysokości odwzorowują się na y_ekran = 0 (względem kamery), niezależnie od ich odległości. Wszystkie punkty zbiegu dla poziomych kierunków w scenie leżą dokładnie na tej linii.
Czy to ta sama matematyka, która jest używana w grach i oprogramowaniu CAD?
Tak. Silniki 3D czasu rzeczywistego i renderery CAD używają identycznego kroku podziału perspektywicznego (dzielenie x i y przez z, skalowane przez ogniskową z pola widzenia) wewnątrz swoich pełnych macierzy projekcji, tylko zaimplementowanego z dodatkowym przycinaniem i buforowaniem głębokości dla wydajności.