Mam statyczny, trójwymiarowy, lewoskrętny układ współrzędnych z osiami ustawionymi pod kątami (w "płaskim" ujęciu, tj. na dwuwymiarowej płaszczyźnie):
X = 0 stopni | Y = 90 stopni | Z = 45 stopni
Wrzuciłem sobie w ten układ zestaw wierzchołków, połączyłem je liniami i stworzyłem sześcian, który - po rzutowaniu go z 3D do 2D - wygląda tak:
Nie przypomina sześcianu, bo moje rzutowanie nie uwzględnia perspektywy (tj. konwertuje wierzchołek 3D na punkt 2D zachowując wszystkie wymiary 1:1, coś jak aksonometria).
Powiedźmy, że wierzchołek ma współrzędne X = 100, Y = 200, Z = 300. Biorę sobie po kolei każdą oś i traktując ją jako po prostu odcinek w dwuwymiarowym układzie współrzędnych (a więc dwa punkty 2D wyznaczają jej oba końce), obliczam wektor jednostkowy dla każdej z osi i wyznaczam współrzędne punktu 2D wedle wzoru:
X punktu = X początku układu współrzędnych + (100 * wektor jednostkowy X dla osi X)
Y punktu = Y początku układu współrzędnych + (100 * wektor jednostkowy Y dla osi X)
X punktu = X punktu + (200 * wektor jednostkowy X dla osi Y)
Y punktu = Y punktu + (200 * wektor jednostkowy Y dla osi Y)
X punktu = X punktu + (300 * wektor jednostkowy X dla osi Z)
Y punktu = Y punktu + (300 * wektor jednostkowy Y dla osi Z)
Dzięki temu wykonuję "ruch" na wszystkich trzech osiach i ustalam pozycję punktu 2D na ekranie, względem układu współrzędnych. W rzucie izometrycznym (gdzie nie ma skróceń na osiach) działa to dobrze, ale chcę uwzględnić również i perspektywę. Pogrzebałem w internecie, znalazłem kilka źródeł i wszystkie podają ten sam wzór przekształceń z wierzchołka 3D na punkt 2D z uwzględnieniem perspektywy:
X punktu = X wierzchołka * (Odległość od kamery / (Z wierzchołka + Odległość od kamery))
Y punktu = Y wierzchołka * (Odległość od kamery / (Z wierzchołka + Odległość od kamery))
Sam wzór wydaje się OK, tylko jednego nie mogę zrozumieć. Jak mam "osadzić" wynik tej operacji na ekranie, skoro nie uwzględnia ona lokalizacji układu współrzędnych i tym samym nie daje mi żadnego punktu odniesienia? Przecież ten sam wierzchołek i o tych samych współrzędnych może po przekonwertowaniu na 2D znajdować się gdziekolwiek, w zależności od położenia układu współrzędnych.