Pytanie jest prawie w tytule. Czy istnieją znaczące projekcje 3D inne niż ortograficzne i perspektywiczne, które można by zastosować w systemie 3D, takim jak OpenGL?
W szczególności, czy są jakieś, które mają szczególne zastosowanie w projektowaniu gier?
Zależy to od tego, co rozumiesz przez „który może być użyty w systemie 3D takim jak OpenGL”. :)
Wąsko mówiąc, sprzęt graficzny 3D i interfejsy API, takie jak OpenGL, działają poprawnie tylko z rzutami liniowymi - rzutowaniami, które odwzorowują linie proste w przestrzeni świata na linie proste na obrazie. Nigdy nie zniekształcają czegoś w zakrzywiony kształt (chyba że na początku było zakrzywione). Dzieje się tak, ponieważ procesory graficzne zależą od trójkątów o prostych krawędziach, aby poprawnie zrasteryzować je na ekranie.
Jeśli ograniczymy się do projekcji liniowych, nie ma zbyt wielu możliwości wyboru. Oprócz standardowej orto i perspektywy istnieją również odmiany „poza środkiem”, które są uzyskiwane przez ścinanie widoku ściętego.
Projekcje te można przedstawić za pomocą zwykłej matrycy projekcyjnej 4 × 4 i bez problemu zastosować w interfejsie API 3D.
Następnie są rzuty nieliniowe, które nie mają ograniczenia mapowania linii prostych na linie proste; wolno im zniekształcać rzeczy w krzywe. Jest ich wiele, w tym cylindryczne, kuliste, różne rodzaje rybiego oka i inne.
W przypadku rzutów nieliniowych nie można po prostu użyć macierzy projekcji; musisz jakoś zrealizować projekcję samodzielnie za pomocą shaderów. Jednym ze sposobów jest napisanie niestandardowego modułu cieniującego wierzchołek, aby wykonać rzut na wierzchołek. GPU nadal będzie rysować trójkąt prostymi liniami między wierzchołkami, więc podczas gdy małe trójkąty będą dość blisko do poprawienia, większe trójkąty będą wyraźnie błędne. Może to powodować problemy , a geometria może wymagać bardzo drobnego podziału w celu poprawnego renderowania.
Drugim podejściem do uzyskania projekcji nieliniowej jest najpierw renderowanie sceny przy użyciu zwykłej projekcji perspektywicznej (być może do mapy sześcianu, która ma rzut perspektywiczny dla każdej powierzchni sześcianu), a następnie zastosowanie postprocesowego modułu cieniującego piksele w celu ponownego próbkowania go do pożądanego projekcja nieliniowa. Ma to tę zaletę, że nie wymaga modyfikacji geometrii, ale może być droższe z powodu dodatkowej wymaganej pracy renderowania, a wynik może być rozmazany w niektórych obszarach, jeśli renderowanie pierwszego przejścia nie ma wystarczającej rozdzielczości. Podejście postprocesowe jest stosowane w grach Oculus Rift, na przykład w celu realizacji projekcji nieliniowej, której Rift wymaga do pracy z soczewkami.
źródło
Nie mogę w to uwierzyć, ale nikt nie wspomniał o rzucie izometrycznym, które kiedyś było dość powszechne.
źródło